//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Lightsail service.
///
/// Amazon Lightsail is the easiest way to get started with Amazon Web Services (Amazon Web Services) for developers who need to build websites or web applications. It includes everything you need to launch your project quickly - instances (virtual private servers), container services, storage buckets, managed databases, SSD-based block storage, static IP addresses, load balancers, content delivery network (CDN) distributions, DNS management of registered domains, and resource snapshots (backups) - for a low, predictable monthly price. You can manage your Lightsail resources using the Lightsail console, Lightsail API, Command Line Interface (CLI), or SDKs. For more information about Lightsail concepts and tasks, see the Amazon Lightsail Developer Guide. This API Reference provides detailed information about the actions, data types, parameters, and errors of the Lightsail service. For more information about the supported Amazon Web Services Regions, endpoints, and service quotas of the Lightsail service, see Amazon Lightsail Endpoints and Quotas in the Amazon Web Services General Reference.
public struct Lightsail: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Lightsail client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "Lightsail_20161128",
            serviceName: "Lightsail",
            serviceIdentifier: "lightsail",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2016-11-28",
            endpoint: endpoint,
            errorType: LightsailErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }





    // MARK: API Calls

    /// Allocates a static IP address.
    @Sendable
    @inlinable
    public func allocateStaticIp(_ input: AllocateStaticIpRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AllocateStaticIpResult {
        try await self.client.execute(
            operation: "AllocateStaticIp", 
            path: "/ls/api/2016-11-28/AllocateStaticIp", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allocates a static IP address.
    ///
    /// Parameters:
    ///   - staticIpName: The name of the static IP address.
    ///   - logger: Logger use during operation
    @inlinable
    public func allocateStaticIp(
        staticIpName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AllocateStaticIpResult {
        let input = AllocateStaticIpRequest(
            staticIpName: staticIpName
        )
        return try await self.allocateStaticIp(input, logger: logger)
    }

    /// Attaches an SSL/TLS certificate to your Amazon Lightsail content delivery network (CDN) distribution. After the certificate is attached, your distribution accepts HTTPS traffic for all of the domains that are associated with the certificate. Use the CreateCertificate action to create a certificate that you can attach to your distribution.  Only certificates created in the us-east-1 Amazon Web Services Region can be attached to Lightsail distributions. Lightsail distributions are global resources that can reference an origin in any Amazon Web Services Region, and distribute its content globally. However, all distributions are located in the us-east-1 Region.
    @Sendable
    @inlinable
    public func attachCertificateToDistribution(_ input: AttachCertificateToDistributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachCertificateToDistributionResult {
        try await self.client.execute(
            operation: "AttachCertificateToDistribution", 
            path: "/ls/api/2016-11-28/AttachCertificateToDistribution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches an SSL/TLS certificate to your Amazon Lightsail content delivery network (CDN) distribution. After the certificate is attached, your distribution accepts HTTPS traffic for all of the domains that are associated with the certificate. Use the CreateCertificate action to create a certificate that you can attach to your distribution.  Only certificates created in the us-east-1 Amazon Web Services Region can be attached to Lightsail distributions. Lightsail distributions are global resources that can reference an origin in any Amazon Web Services Region, and distribute its content globally. However, all distributions are located in the us-east-1 Region.
    ///
    /// Parameters:
    ///   - certificateName: The name of the certificate to attach to a distribution. Only certificates with a status of ISSUED can be attached to a distribution. Use the GetCertificates action to get a list of certificate names that you can specify.  This is the name of the certificate resource type and is used only to reference the certificate in other API actions. It can be different than the domain name of the certificate. For example, your certificate name might be WordPress-Blog-Certificate and the domain name of the certificate might be example.com.
    ///   - distributionName: The name of the distribution that the certificate will be attached to. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachCertificateToDistribution(
        certificateName: String,
        distributionName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachCertificateToDistributionResult {
        let input = AttachCertificateToDistributionRequest(
            certificateName: certificateName, 
            distributionName: distributionName
        )
        return try await self.attachCertificateToDistribution(input, logger: logger)
    }

    /// Attaches a block storage disk to a running or stopped Lightsail instance and exposes it to the instance with the specified disk name. The attach disk operation supports tag-based access control via resource tags applied to the resource identified by disk name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func attachDisk(_ input: AttachDiskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachDiskResult {
        try await self.client.execute(
            operation: "AttachDisk", 
            path: "/ls/api/2016-11-28/AttachDisk", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches a block storage disk to a running or stopped Lightsail instance and exposes it to the instance with the specified disk name. The attach disk operation supports tag-based access control via resource tags applied to the resource identified by disk name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - autoMounting: A Boolean value used to determine the automatic mounting of a storage volume to a virtual computer. The default value is False.  This value only applies to Lightsail for Research resources.
    ///   - diskName: The unique Lightsail disk name (my-disk).
    ///   - diskPath: The disk path to expose to the instance (/dev/xvdf).
    ///   - instanceName: The name of the Lightsail instance where you want to utilize the storage disk.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachDisk(
        autoMounting: Bool? = nil,
        diskName: String,
        diskPath: String,
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachDiskResult {
        let input = AttachDiskRequest(
            autoMounting: autoMounting, 
            diskName: diskName, 
            diskPath: diskPath, 
            instanceName: instanceName
        )
        return try await self.attachDisk(input, logger: logger)
    }

    /// Attaches one or more Lightsail instances to a load balancer. After some time, the instances are attached to the load balancer and the health check status is available. The attach instances to load balancer operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func attachInstancesToLoadBalancer(_ input: AttachInstancesToLoadBalancerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachInstancesToLoadBalancerResult {
        try await self.client.execute(
            operation: "AttachInstancesToLoadBalancer", 
            path: "/ls/api/2016-11-28/AttachInstancesToLoadBalancer", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches one or more Lightsail instances to a load balancer. After some time, the instances are attached to the load balancer and the health check status is available. The attach instances to load balancer operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceNames: An array of strings representing the instance name(s) you want to attach to your load balancer. An instance must be running before you can attach it to your load balancer. There are no additional limits on the number of instances you can attach to your load balancer, aside from the limit of Lightsail instances you can create in your account (20).
    ///   - loadBalancerName: The name of the load balancer.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachInstancesToLoadBalancer(
        instanceNames: [String],
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachInstancesToLoadBalancerResult {
        let input = AttachInstancesToLoadBalancerRequest(
            instanceNames: instanceNames, 
            loadBalancerName: loadBalancerName
        )
        return try await self.attachInstancesToLoadBalancer(input, logger: logger)
    }

    /// Attaches a Transport Layer Security (TLS) certificate to your load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL). Once you create and validate your certificate, you can attach it to your load balancer. You can also use this API to rotate the certificates on your account. Use the AttachLoadBalancerTlsCertificate action with the non-attached certificate, and it will replace the existing one and become the attached certificate. The AttachLoadBalancerTlsCertificate operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func attachLoadBalancerTlsCertificate(_ input: AttachLoadBalancerTlsCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachLoadBalancerTlsCertificateResult {
        try await self.client.execute(
            operation: "AttachLoadBalancerTlsCertificate", 
            path: "/ls/api/2016-11-28/AttachLoadBalancerTlsCertificate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches a Transport Layer Security (TLS) certificate to your load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL). Once you create and validate your certificate, you can attach it to your load balancer. You can also use this API to rotate the certificates on your account. Use the AttachLoadBalancerTlsCertificate action with the non-attached certificate, and it will replace the existing one and become the attached certificate. The AttachLoadBalancerTlsCertificate operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - certificateName: The name of your SSL/TLS certificate.
    ///   - loadBalancerName: The name of the load balancer to which you want to associate the SSL/TLS certificate.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachLoadBalancerTlsCertificate(
        certificateName: String,
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachLoadBalancerTlsCertificateResult {
        let input = AttachLoadBalancerTlsCertificateRequest(
            certificateName: certificateName, 
            loadBalancerName: loadBalancerName
        )
        return try await self.attachLoadBalancerTlsCertificate(input, logger: logger)
    }

    /// Attaches a static IP address to a specific Amazon Lightsail instance.
    @Sendable
    @inlinable
    public func attachStaticIp(_ input: AttachStaticIpRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> AttachStaticIpResult {
        try await self.client.execute(
            operation: "AttachStaticIp", 
            path: "/ls/api/2016-11-28/AttachStaticIp", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches a static IP address to a specific Amazon Lightsail instance.
    ///
    /// Parameters:
    ///   - instanceName: The instance name to which you want to attach the static IP address.
    ///   - staticIpName: The name of the static IP.
    ///   - logger: Logger use during operation
    @inlinable
    public func attachStaticIp(
        instanceName: String,
        staticIpName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> AttachStaticIpResult {
        let input = AttachStaticIpRequest(
            instanceName: instanceName, 
            staticIpName: staticIpName
        )
        return try await self.attachStaticIp(input, logger: logger)
    }

    /// Closes ports for a specific Amazon Lightsail instance. The CloseInstancePublicPorts action supports tag-based access control via resource tags applied to the resource identified by instanceName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func closeInstancePublicPorts(_ input: CloseInstancePublicPortsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CloseInstancePublicPortsResult {
        try await self.client.execute(
            operation: "CloseInstancePublicPorts", 
            path: "/ls/api/2016-11-28/CloseInstancePublicPorts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Closes ports for a specific Amazon Lightsail instance. The CloseInstancePublicPorts action supports tag-based access control via resource tags applied to the resource identified by instanceName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance for which to close ports.
    ///   - portInfo: An object to describe the ports to close for the specified instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func closeInstancePublicPorts(
        instanceName: String,
        portInfo: PortInfo,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CloseInstancePublicPortsResult {
        let input = CloseInstancePublicPortsRequest(
            instanceName: instanceName, 
            portInfo: portInfo
        )
        return try await self.closeInstancePublicPorts(input, logger: logger)
    }

    /// Copies a manual snapshot of an instance or disk as another manual snapshot, or copies an automatic snapshot of an instance or disk as a manual snapshot. This operation can also be used to copy a manual or automatic snapshot of an instance or a disk from one Amazon Web Services Region to another in Amazon Lightsail. When copying a manual snapshot, be sure to define the source region, source snapshot name, and target snapshot name parameters. When copying an automatic snapshot, be sure to define the source region, source resource name, target snapshot name, and either the restore date or the use latest restorable auto snapshot parameters.
    @Sendable
    @inlinable
    public func copySnapshot(_ input: CopySnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CopySnapshotResult {
        try await self.client.execute(
            operation: "CopySnapshot", 
            path: "/ls/api/2016-11-28/CopySnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Copies a manual snapshot of an instance or disk as another manual snapshot, or copies an automatic snapshot of an instance or disk as a manual snapshot. This operation can also be used to copy a manual or automatic snapshot of an instance or a disk from one Amazon Web Services Region to another in Amazon Lightsail. When copying a manual snapshot, be sure to define the source region, source snapshot name, and target snapshot name parameters. When copying an automatic snapshot, be sure to define the source region, source resource name, target snapshot name, and either the restore date or the use latest restorable auto snapshot parameters.
    ///
    /// Parameters:
    ///   - restoreDate: The date of the source automatic snapshot to copy. Use the get auto snapshots operation to identify the dates of the available automatic snapshots. Constraints:   Must be specified in YYYY-MM-DD format.   This parameter cannot be defined together with the use latest restorable auto snapshot parameter. The restore date and use latest restorable auto snapshot parameters are mutually exclusive.   Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - sourceRegion: The Amazon Web Services Region where the source manual or automatic snapshot is located.
    ///   - sourceResourceName: The name of the source instance or disk from which the source automatic snapshot was created. Constraint:   Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - sourceSnapshotName: The name of the source manual snapshot to copy. Constraint:   Define this parameter only when copying a manual snapshot as another manual snapshot.
    ///   - targetSnapshotName: The name of the new manual snapshot to be created as a copy.
    ///   - useLatestRestorableAutoSnapshot: A Boolean value to indicate whether to use the latest available automatic snapshot of the specified source instance or disk. Constraints:   This parameter cannot be defined together with the restore date parameter. The use latest restorable auto snapshot and restore date parameters are mutually exclusive.   Define this parameter only when copying an automatic snapshot as a manual snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func copySnapshot(
        restoreDate: String? = nil,
        sourceRegion: RegionName,
        sourceResourceName: String? = nil,
        sourceSnapshotName: String? = nil,
        targetSnapshotName: String,
        useLatestRestorableAutoSnapshot: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CopySnapshotResult {
        let input = CopySnapshotRequest(
            restoreDate: restoreDate, 
            sourceRegion: sourceRegion, 
            sourceResourceName: sourceResourceName, 
            sourceSnapshotName: sourceSnapshotName, 
            targetSnapshotName: targetSnapshotName, 
            useLatestRestorableAutoSnapshot: useLatestRestorableAutoSnapshot
        )
        return try await self.copySnapshot(input, logger: logger)
    }

    /// Creates an Amazon Lightsail bucket. A bucket is a cloud storage resource available in the Lightsail object storage service. Use buckets to store objects such as data and its descriptive metadata. For more information about buckets, see Buckets in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createBucket(_ input: CreateBucketRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBucketResult {
        try await self.client.execute(
            operation: "CreateBucket", 
            path: "/ls/api/2016-11-28/CreateBucket", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon Lightsail bucket. A bucket is a cloud storage resource available in the Lightsail object storage service. Use buckets to store objects such as data and its descriptive metadata. For more information about buckets, see Buckets in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - bucketName: The name for the bucket. For more information about bucket names, see Bucket naming rules in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    ///   - bundleId: The ID of the bundle to use for the bucket. A bucket bundle specifies the monthly cost, storage space, and data transfer quota for a bucket. Use the GetBucketBundles action to get a list of bundle IDs that you can specify. Use the UpdateBucketBundle action to change the bundle after the bucket is created.
    ///   - enableObjectVersioning: A Boolean value that indicates whether to enable versioning of objects in the bucket. For more information about versioning, see Enabling and suspending object versioning in a bucket in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    ///   - tags: The tag keys and optional values to add to the bucket during creation. Use the TagResource action to tag the bucket after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBucket(
        bucketName: String,
        bundleId: String,
        enableObjectVersioning: Bool? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBucketResult {
        let input = CreateBucketRequest(
            bucketName: bucketName, 
            bundleId: bundleId, 
            enableObjectVersioning: enableObjectVersioning, 
            tags: tags
        )
        return try await self.createBucket(input, logger: logger)
    }

    /// Creates a new access key for the specified Amazon Lightsail bucket. Access keys consist of an access key ID and corresponding secret access key. Access keys grant full programmatic access to the specified bucket and its objects. You can have a maximum of two access keys per bucket. Use the GetBucketAccessKeys action to get a list of current access keys for a specific bucket. For more information about access keys, see Creating access keys for a bucket in Amazon Lightsail in the Amazon Lightsail Developer Guide.  The secretAccessKey value is returned only in response to the CreateBucketAccessKey action. You can get a secret access key only when you first create an access key; you cannot get the secret access key later. If you lose the secret access key, you must create a new access key.
    @Sendable
    @inlinable
    public func createBucketAccessKey(_ input: CreateBucketAccessKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateBucketAccessKeyResult {
        try await self.client.execute(
            operation: "CreateBucketAccessKey", 
            path: "/ls/api/2016-11-28/CreateBucketAccessKey", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new access key for the specified Amazon Lightsail bucket. Access keys consist of an access key ID and corresponding secret access key. Access keys grant full programmatic access to the specified bucket and its objects. You can have a maximum of two access keys per bucket. Use the GetBucketAccessKeys action to get a list of current access keys for a specific bucket. For more information about access keys, see Creating access keys for a bucket in Amazon Lightsail in the Amazon Lightsail Developer Guide.  The secretAccessKey value is returned only in response to the CreateBucketAccessKey action. You can get a secret access key only when you first create an access key; you cannot get the secret access key later. If you lose the secret access key, you must create a new access key.
    ///
    /// Parameters:
    ///   - bucketName: The name of the bucket that the new access key will belong to, and grant access to.
    ///   - logger: Logger use during operation
    @inlinable
    public func createBucketAccessKey(
        bucketName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateBucketAccessKeyResult {
        let input = CreateBucketAccessKeyRequest(
            bucketName: bucketName
        )
        return try await self.createBucketAccessKey(input, logger: logger)
    }

    /// Creates an SSL/TLS certificate for an Amazon Lightsail content delivery network (CDN) distribution and a container service. After the certificate is valid, use the AttachCertificateToDistribution action to use the certificate and its domains with your distribution. Or use the UpdateContainerService action to use the certificate and its domains with your container service.  Only certificates created in the us-east-1 Amazon Web Services Region can be attached to Lightsail distributions. Lightsail distributions are global resources that can reference an origin in any Amazon Web Services Region, and distribute its content globally. However, all distributions are located in the us-east-1 Region.
    @Sendable
    @inlinable
    public func createCertificate(_ input: CreateCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCertificateResult {
        try await self.client.execute(
            operation: "CreateCertificate", 
            path: "/ls/api/2016-11-28/CreateCertificate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an SSL/TLS certificate for an Amazon Lightsail content delivery network (CDN) distribution and a container service. After the certificate is valid, use the AttachCertificateToDistribution action to use the certificate and its domains with your distribution. Or use the UpdateContainerService action to use the certificate and its domains with your container service.  Only certificates created in the us-east-1 Amazon Web Services Region can be attached to Lightsail distributions. Lightsail distributions are global resources that can reference an origin in any Amazon Web Services Region, and distribute its content globally. However, all distributions are located in the us-east-1 Region.
    ///
    /// Parameters:
    ///   - certificateName: The name for the certificate.
    ///   - domainName: The domain name (example.com) for the certificate.
    ///   - subjectAlternativeNames: An array of strings that specify the alternate domains (example2.com) and subdomains (blog.example.com) for the certificate. You can specify a maximum of nine alternate domains (in addition to the primary domain name). Wildcard domain entries (*.example.com) are not supported.
    ///   - tags: The tag keys and optional values to add to the certificate during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCertificate(
        certificateName: String,
        domainName: String,
        subjectAlternativeNames: [String]? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCertificateResult {
        let input = CreateCertificateRequest(
            certificateName: certificateName, 
            domainName: domainName, 
            subjectAlternativeNames: subjectAlternativeNames, 
            tags: tags
        )
        return try await self.createCertificate(input, logger: logger)
    }

    /// Creates an AWS CloudFormation stack, which creates a new Amazon EC2 instance from an exported Amazon Lightsail snapshot. This operation results in a CloudFormation stack record that can be used to track the AWS CloudFormation stack created. Use the get cloud formation stack records operation to get a list of the CloudFormation stacks created.  Wait until after your new Amazon EC2 instance is created before running the create cloud formation stack operation again with the same export snapshot record.
    @Sendable
    @inlinable
    public func createCloudFormationStack(_ input: CreateCloudFormationStackRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateCloudFormationStackResult {
        try await self.client.execute(
            operation: "CreateCloudFormationStack", 
            path: "/ls/api/2016-11-28/CreateCloudFormationStack", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an AWS CloudFormation stack, which creates a new Amazon EC2 instance from an exported Amazon Lightsail snapshot. This operation results in a CloudFormation stack record that can be used to track the AWS CloudFormation stack created. Use the get cloud formation stack records operation to get a list of the CloudFormation stacks created.  Wait until after your new Amazon EC2 instance is created before running the create cloud formation stack operation again with the same export snapshot record.
    ///
    /// Parameters:
    ///   - instances: An array of parameters that will be used to create the new Amazon EC2 instance. You can only pass one instance entry at a time in this array. You will get an invalid parameter error if you pass more than one instance entry in this array.
    ///   - logger: Logger use during operation
    @inlinable
    public func createCloudFormationStack(
        instances: [InstanceEntry],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateCloudFormationStackResult {
        let input = CreateCloudFormationStackRequest(
            instances: instances
        )
        return try await self.createCloudFormationStack(input, logger: logger)
    }

    /// Creates an email or SMS text message contact method. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail.
    @Sendable
    @inlinable
    public func createContactMethod(_ input: CreateContactMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateContactMethodResult {
        try await self.client.execute(
            operation: "CreateContactMethod", 
            path: "/ls/api/2016-11-28/CreateContactMethod", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an email or SMS text message contact method. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - contactEndpoint: The destination of the contact method, such as an email address or a mobile phone number. Use the E.164 format when specifying a mobile phone number. E.164 is a standard for the phone number structure used for international telecommunication. Phone numbers that follow this format can have a maximum of 15 digits, and they are prefixed with the plus character (+) and the country code. For example, a U.S. phone number in E.164 format would be specified as +1XXX5550100. For more information, see E.164 on Wikipedia.
    ///   - protocol: The protocol of the contact method, such as Email or SMS (text messaging). The SMS protocol is supported only in the following Amazon Web Services Regions.   US East (N. Virginia) (us-east-1)   US West (Oregon) (us-west-2)   Europe (Ireland) (eu-west-1)   Asia Pacific (Tokyo) (ap-northeast-1)   Asia Pacific (Singapore) (ap-southeast-1)   Asia Pacific (Sydney) (ap-southeast-2)   For a list of countries/regions where SMS text messages can be sent, and the latest Amazon Web Services Regions where SMS text messaging is supported, see Supported Regions and Countries in the Amazon SNS Developer Guide. For more information about notifications in Amazon Lightsail, see Notifications in Amazon Lightsail.
    ///   - logger: Logger use during operation
    @inlinable
    public func createContactMethod(
        contactEndpoint: String,
        protocol: ContactProtocol,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateContactMethodResult {
        let input = CreateContactMethodRequest(
            contactEndpoint: contactEndpoint, 
            protocol: `protocol`
        )
        return try await self.createContactMethod(input, logger: logger)
    }

    /// Creates an Amazon Lightsail container service. A Lightsail container service is a compute resource to which you can deploy containers. For more information, see Container services in Amazon Lightsail in the Lightsail Dev Guide.
    @Sendable
    @inlinable
    public func createContainerService(_ input: CreateContainerServiceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateContainerServiceResult {
        try await self.client.execute(
            operation: "CreateContainerService", 
            path: "/ls/api/2016-11-28/container-services", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon Lightsail container service. A Lightsail container service is a compute resource to which you can deploy containers. For more information, see Container services in Amazon Lightsail in the Lightsail Dev Guide.
    ///
    /// Parameters:
    ///   - deployment: An object that describes a deployment for the container service. A deployment specifies the containers that will be launched on the container service and their settings, such as the ports to open, the environment variables to apply, and the launch command to run. It also specifies the container that will serve as the public endpoint of the deployment and its settings, such as the HTTP or HTTPS port to use, and the health check configuration.
    ///   - power: The power specification for the container service. The power specifies the amount of memory, vCPUs, and base monthly cost of each node of the container service. The power and scale of a container service makes up its configured capacity. To determine the monthly price of your container service, multiply the base price of the power with the scale (the number of nodes) of the service. Use the GetContainerServicePowers action to get a list of power options that you can specify using this parameter, and their base monthly cost.
    ///   - privateRegistryAccess: An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories. For more information, see Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service in the Amazon Lightsail Developer Guide.
    ///   - publicDomainNames: The public domain names to use with the container service, such as example.com and www.example.com. You can specify up to four public domain names for a container service. The domain names that you specify are used when you create a deployment with a container configured as the public endpoint of your container service. If you don't specify public domain names, then you can use the default domain of the container service.  You must create and validate an SSL/TLS certificate before you can use public domain names with your container service. Use the CreateCertificate action to create a certificate for the public domain names you want to use with your container service.  You can specify public domain names using a string to array map as shown in the example later on this page.
    ///   - scale: The scale specification for the container service. The scale specifies the allocated compute nodes of the container service. The power and scale of a container service makes up its configured capacity. To determine the monthly price of your container service, multiply the base price of the power with the scale (the number of nodes) of the service.
    ///   - serviceName: The name for the container service. The name that you specify for your container service will make up part of its default domain. The default domain of a container service is typically https://...cs.amazonlightsail.com. If the name of your container service is container-service-1, and it's located in the US East (Ohio) Amazon Web Services Region (us-east-2), then the domain for your container service will be like the following example: https://container-service-1.ur4EXAMPLE2uq.us-east-2.cs.amazonlightsail.com  The following are the requirements for container service names:   Must be unique within each Amazon Web Services Region in your Lightsail account.   Must contain 1 to 63 characters.   Must contain only alphanumeric characters and hyphens.   A hyphen (-) can separate words but cannot be at the start or end of the name.
    ///   - tags: The tag keys and optional values to add to the container service during create. Use the TagResource action to tag a resource after it's created. For more information about tags in Lightsail, see the Amazon Lightsail Developer Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createContainerService(
        deployment: ContainerServiceDeploymentRequest? = nil,
        power: ContainerServicePowerName,
        privateRegistryAccess: PrivateRegistryAccessRequest? = nil,
        publicDomainNames: [String: [String]]? = nil,
        scale: Int,
        serviceName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateContainerServiceResult {
        let input = CreateContainerServiceRequest(
            deployment: deployment, 
            power: power, 
            privateRegistryAccess: privateRegistryAccess, 
            publicDomainNames: publicDomainNames, 
            scale: scale, 
            serviceName: serviceName, 
            tags: tags
        )
        return try await self.createContainerService(input, logger: logger)
    }

    /// Creates a deployment for your Amazon Lightsail container service. A deployment specifies the containers that will be launched on the container service and their settings, such as the ports to open, the environment variables to apply, and the launch command to run. It also specifies the container that will serve as the public endpoint of the deployment and its settings, such as the HTTP or HTTPS port to use, and the health check configuration. You can deploy containers to your container service using container images from a public registry such as Amazon ECR Public, or from your local machine. For more information, see Creating container images for your Amazon Lightsail container services in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createContainerServiceDeployment(_ input: CreateContainerServiceDeploymentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateContainerServiceDeploymentResult {
        try await self.client.execute(
            operation: "CreateContainerServiceDeployment", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/deployments", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a deployment for your Amazon Lightsail container service. A deployment specifies the containers that will be launched on the container service and their settings, such as the ports to open, the environment variables to apply, and the launch command to run. It also specifies the container that will serve as the public endpoint of the deployment and its settings, such as the HTTP or HTTPS port to use, and the health check configuration. You can deploy containers to your container service using container images from a public registry such as Amazon ECR Public, or from your local machine. For more information, see Creating container images for your Amazon Lightsail container services in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - containers: An object that describes the settings of the containers that will be launched on the container service.
    ///   - publicEndpoint: An object that describes the settings of the public endpoint for the container service.
    ///   - serviceName: The name of the container service for which to create the deployment.
    ///   - logger: Logger use during operation
    @inlinable
    public func createContainerServiceDeployment(
        containers: [String: Container]? = nil,
        publicEndpoint: EndpointRequest? = nil,
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateContainerServiceDeploymentResult {
        let input = CreateContainerServiceDeploymentRequest(
            containers: containers, 
            publicEndpoint: publicEndpoint, 
            serviceName: serviceName
        )
        return try await self.createContainerServiceDeployment(input, logger: logger)
    }

    /// Creates a temporary set of log in credentials that you can use to log in to the Docker process on your local machine. After you're logged in, you can use the native Docker commands to push your local container images to the container image registry of your Amazon Lightsail account so that you can use them with your Lightsail container service. The log in credentials expire 12 hours after they are created, at which point you will need to create a new set of log in credentials.  You can only push container images to the container service registry of your Lightsail account. You cannot pull container images or perform any other container image management actions on the container service registry.  After you push your container images to the container image registry of your Lightsail account, use the RegisterContainerImage action to register the pushed images to a specific Lightsail container service.  This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see Pushing and managing container images on your Amazon Lightsail container services in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createContainerServiceRegistryLogin(_ input: CreateContainerServiceRegistryLoginRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateContainerServiceRegistryLoginResult {
        try await self.client.execute(
            operation: "CreateContainerServiceRegistryLogin", 
            path: "/ls/api/2016-11-28/container-registry-login", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a temporary set of log in credentials that you can use to log in to the Docker process on your local machine. After you're logged in, you can use the native Docker commands to push your local container images to the container image registry of your Amazon Lightsail account so that you can use them with your Lightsail container service. The log in credentials expire 12 hours after they are created, at which point you will need to create a new set of log in credentials.  You can only push container images to the container service registry of your Lightsail account. You cannot pull container images or perform any other container image management actions on the container service registry.  After you push your container images to the container image registry of your Lightsail account, use the RegisterContainerImage action to register the pushed images to a specific Lightsail container service.  This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see Pushing and managing container images on your Amazon Lightsail container services in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func createContainerServiceRegistryLogin(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateContainerServiceRegistryLoginResult {
        let input = CreateContainerServiceRegistryLoginRequest(
        )
        return try await self.createContainerServiceRegistryLogin(input, logger: logger)
    }

    /// Creates a block storage disk that can be attached to an Amazon Lightsail instance in the same Availability Zone (us-east-2a). The create disk operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createDisk(_ input: CreateDiskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDiskResult {
        try await self.client.execute(
            operation: "CreateDisk", 
            path: "/ls/api/2016-11-28/CreateDisk", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a block storage disk that can be attached to an Amazon Lightsail instance in the same Availability Zone (us-east-2a). The create disk operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - addOns: An array of objects that represent the add-ons to enable for the new disk.
    ///   - availabilityZone: The Availability Zone where you want to create the disk (us-east-2a). Use the same Availability Zone as the Lightsail instance to which you want to attach the disk. Use the get regions operation to list the Availability Zones where Lightsail is currently available.
    ///   - diskName: The unique Lightsail disk name (my-disk).
    ///   - sizeInGb: The size of the disk in GB (32).
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDisk(
        addOns: [AddOnRequest]? = nil,
        availabilityZone: String,
        diskName: String,
        sizeInGb: Int,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDiskResult {
        let input = CreateDiskRequest(
            addOns: addOns, 
            availabilityZone: availabilityZone, 
            diskName: diskName, 
            sizeInGb: sizeInGb, 
            tags: tags
        )
        return try await self.createDisk(input, logger: logger)
    }

    /// Creates a block storage disk from a manual or automatic snapshot of a disk. The resulting disk can be attached to an Amazon Lightsail instance in the same Availability Zone (us-east-2a). The create disk from snapshot operation supports tag-based access control via request tags and resource tags applied to the resource identified by disk snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createDiskFromSnapshot(_ input: CreateDiskFromSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDiskFromSnapshotResult {
        try await self.client.execute(
            operation: "CreateDiskFromSnapshot", 
            path: "/ls/api/2016-11-28/CreateDiskFromSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a block storage disk from a manual or automatic snapshot of a disk. The resulting disk can be attached to an Amazon Lightsail instance in the same Availability Zone (us-east-2a). The create disk from snapshot operation supports tag-based access control via request tags and resource tags applied to the resource identified by disk snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - addOns: An array of objects that represent the add-ons to enable for the new disk.
    ///   - availabilityZone: The Availability Zone where you want to create the disk (us-east-2a). Choose the same Availability Zone as the Lightsail instance where you want to create the disk. Use the GetRegions operation to list the Availability Zones where Lightsail is currently available.
    ///   - diskName: The unique Lightsail disk name (my-disk).
    ///   - diskSnapshotName: The name of the disk snapshot (my-snapshot) from which to create the new storage disk. Constraint:   This parameter cannot be defined together with the source disk name parameter. The disk snapshot name and source disk name parameters are mutually exclusive.
    ///   - restoreDate: The date of the automatic snapshot to use for the new disk. Use the get auto snapshots operation to identify the dates of the available automatic snapshots. Constraints:   Must be specified in YYYY-MM-DD format.   This parameter cannot be defined together with the use latest restorable auto snapshot parameter. The restore date and use latest restorable auto snapshot parameters are mutually exclusive.   Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - sizeInGb: The size of the disk in GB (32).
    ///   - sourceDiskName: The name of the source disk from which the source automatic snapshot was created. Constraints:   This parameter cannot be defined together with the disk snapshot name parameter. The source disk name and disk snapshot name parameters are mutually exclusive.   Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - useLatestRestorableAutoSnapshot: A Boolean value to indicate whether to use the latest available automatic snapshot. Constraints:   This parameter cannot be defined together with the restore date parameter. The use latest restorable auto snapshot and restore date parameters are mutually exclusive.   Define this parameter only when creating a new disk from an automatic snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDiskFromSnapshot(
        addOns: [AddOnRequest]? = nil,
        availabilityZone: String,
        diskName: String,
        diskSnapshotName: String? = nil,
        restoreDate: String? = nil,
        sizeInGb: Int,
        sourceDiskName: String? = nil,
        tags: [Tag]? = nil,
        useLatestRestorableAutoSnapshot: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDiskFromSnapshotResult {
        let input = CreateDiskFromSnapshotRequest(
            addOns: addOns, 
            availabilityZone: availabilityZone, 
            diskName: diskName, 
            diskSnapshotName: diskSnapshotName, 
            restoreDate: restoreDate, 
            sizeInGb: sizeInGb, 
            sourceDiskName: sourceDiskName, 
            tags: tags, 
            useLatestRestorableAutoSnapshot: useLatestRestorableAutoSnapshot
        )
        return try await self.createDiskFromSnapshot(input, logger: logger)
    }

    /// Creates a snapshot of a block storage disk. You can use snapshots for backups, to make copies of disks, and to save data before shutting down a Lightsail instance. You can take a snapshot of an attached disk that is in use; however, snapshots only capture data that has been written to your disk at the time the snapshot command is issued. This may exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the disk long enough to take a snapshot, your snapshot should be complete. Nevertheless, if you cannot pause all file writes to the disk, you should unmount the disk from within the Lightsail instance, issue the create disk snapshot command, and then remount the disk to ensure a consistent and complete snapshot. You may remount and use your disk while the snapshot status is pending. You can also use this operation to create a snapshot of an instance's system volume. You might want to do this, for example, to recover data from the system volume of a botched instance or to create a backup of the system volume like you would for a block storage disk. To create a snapshot of a system volume, just define the instance name parameter when issuing the snapshot command, and a snapshot of the defined instance's system volume will be created. After the snapshot is available, you can create a block storage disk from the snapshot and attach it to a running instance to access the data on the disk. The create disk snapshot operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createDiskSnapshot(_ input: CreateDiskSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDiskSnapshotResult {
        try await self.client.execute(
            operation: "CreateDiskSnapshot", 
            path: "/ls/api/2016-11-28/CreateDiskSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a snapshot of a block storage disk. You can use snapshots for backups, to make copies of disks, and to save data before shutting down a Lightsail instance. You can take a snapshot of an attached disk that is in use; however, snapshots only capture data that has been written to your disk at the time the snapshot command is issued. This may exclude any data that has been cached by any applications or the operating system. If you can pause any file systems on the disk long enough to take a snapshot, your snapshot should be complete. Nevertheless, if you cannot pause all file writes to the disk, you should unmount the disk from within the Lightsail instance, issue the create disk snapshot command, and then remount the disk to ensure a consistent and complete snapshot. You may remount and use your disk while the snapshot status is pending. You can also use this operation to create a snapshot of an instance's system volume. You might want to do this, for example, to recover data from the system volume of a botched instance or to create a backup of the system volume like you would for a block storage disk. To create a snapshot of a system volume, just define the instance name parameter when issuing the snapshot command, and a snapshot of the defined instance's system volume will be created. After the snapshot is available, you can create a block storage disk from the snapshot and attach it to a running instance to access the data on the disk. The create disk snapshot operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - diskName: The unique name of the source disk (Disk-Virginia-1).  This parameter cannot be defined together with the instance name parameter. The disk name and instance name parameters are mutually exclusive.
    ///   - diskSnapshotName: The name of the destination disk snapshot (my-disk-snapshot) based on the source disk.
    ///   - instanceName: The unique name of the source instance (Amazon_Linux-512MB-Virginia-1). When this is defined, a snapshot of the instance's system volume is created.  This parameter cannot be defined together with the disk name parameter. The instance name and disk name parameters are mutually exclusive.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDiskSnapshot(
        diskName: String? = nil,
        diskSnapshotName: String,
        instanceName: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDiskSnapshotResult {
        let input = CreateDiskSnapshotRequest(
            diskName: diskName, 
            diskSnapshotName: diskSnapshotName, 
            instanceName: instanceName, 
            tags: tags
        )
        return try await self.createDiskSnapshot(input, logger: logger)
    }

    /// Creates an Amazon Lightsail content delivery network (CDN) distribution. A distribution is a globally distributed network of caching servers that improve the performance of your website or web application hosted on a Lightsail instance. For more information, see Content delivery networks in Amazon Lightsail.
    @Sendable
    @inlinable
    public func createDistribution(_ input: CreateDistributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDistributionResult {
        try await self.client.execute(
            operation: "CreateDistribution", 
            path: "/ls/api/2016-11-28/CreateDistribution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an Amazon Lightsail content delivery network (CDN) distribution. A distribution is a globally distributed network of caching servers that improve the performance of your website or web application hosted on a Lightsail instance. For more information, see Content delivery networks in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - bundleId: The bundle ID to use for the distribution. A distribution bundle describes the specifications of your distribution, such as the monthly cost and monthly network transfer quota. Use the GetDistributionBundles action to get a list of distribution bundle IDs that you can specify.
    ///   - cacheBehaviors: An array of objects that describe the per-path cache behavior for the distribution.
    ///   - cacheBehaviorSettings: An object that describes the cache behavior settings for the distribution.
    ///   - certificateName: The name of the SSL/TLS certificate that you want to attach to the distribution. Use the GetCertificates action to get a list of certificate names that you can specify.
    ///   - defaultCacheBehavior: An object that describes the default cache behavior for the distribution.
    ///   - distributionName: The name for the distribution.
    ///   - ipAddressType: The IP address type for the distribution. The possible values are ipv4 for IPv4 only, and dualstack for IPv4 and IPv6. The default value is dualstack.
    ///   - origin: An object that describes the origin resource for the distribution, such as a Lightsail instance, bucket, or load balancer. The distribution pulls, caches, and serves content from the origin.
    ///   - tags: The tag keys and optional values to add to the distribution during create. Use the TagResource action to tag a resource after it's created.
    ///   - viewerMinimumTlsProtocolVersion: The minimum TLS protocol version for the SSL/TLS certificate.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDistribution(
        bundleId: String,
        cacheBehaviors: [CacheBehaviorPerPath]? = nil,
        cacheBehaviorSettings: CacheSettings? = nil,
        certificateName: String? = nil,
        defaultCacheBehavior: CacheBehavior,
        distributionName: String,
        ipAddressType: IpAddressType? = nil,
        origin: InputOrigin,
        tags: [Tag]? = nil,
        viewerMinimumTlsProtocolVersion: ViewerMinimumTlsProtocolVersionEnum? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDistributionResult {
        let input = CreateDistributionRequest(
            bundleId: bundleId, 
            cacheBehaviors: cacheBehaviors, 
            cacheBehaviorSettings: cacheBehaviorSettings, 
            certificateName: certificateName, 
            defaultCacheBehavior: defaultCacheBehavior, 
            distributionName: distributionName, 
            ipAddressType: ipAddressType, 
            origin: origin, 
            tags: tags, 
            viewerMinimumTlsProtocolVersion: viewerMinimumTlsProtocolVersion
        )
        return try await self.createDistribution(input, logger: logger)
    }

    /// Creates a domain resource for the specified domain (example.com). The create domain operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createDomain(_ input: CreateDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDomainResult {
        try await self.client.execute(
            operation: "CreateDomain", 
            path: "/ls/api/2016-11-28/CreateDomain", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a domain resource for the specified domain (example.com). The create domain operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - domainName: The domain name to manage (example.com).
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDomain(
        domainName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDomainResult {
        let input = CreateDomainRequest(
            domainName: domainName, 
            tags: tags
        )
        return try await self.createDomain(input, logger: logger)
    }

    /// Creates one of the following domain name system (DNS) records in a domain DNS zone: Address (A), canonical name (CNAME), mail exchanger (MX), name server (NS), start of authority (SOA), service locator (SRV), or text (TXT). The create domain entry operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createDomainEntry(_ input: CreateDomainEntryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDomainEntryResult {
        try await self.client.execute(
            operation: "CreateDomainEntry", 
            path: "/ls/api/2016-11-28/CreateDomainEntry", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates one of the following domain name system (DNS) records in a domain DNS zone: Address (A), canonical name (CNAME), mail exchanger (MX), name server (NS), start of authority (SOA), service locator (SRV), or text (TXT). The create domain entry operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - domainEntry: An array of key-value pairs containing information about the domain entry request.
    ///   - domainName: The domain name (example.com) for which you want to create the domain entry.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDomainEntry(
        domainEntry: DomainEntry,
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDomainEntryResult {
        let input = CreateDomainEntryRequest(
            domainEntry: domainEntry, 
            domainName: domainName
        )
        return try await self.createDomainEntry(input, logger: logger)
    }

    /// Creates two URLs that are used to access a virtual computer’s graphical user interface (GUI) session. The primary URL initiates a web-based Amazon DCV session to the virtual computer's application. The secondary URL initiates a web-based Amazon DCV session to the virtual computer's operating session.  Use StartGUISession to open the session.
    @Sendable
    @inlinable
    public func createGUISessionAccessDetails(_ input: CreateGUISessionAccessDetailsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateGUISessionAccessDetailsResult {
        try await self.client.execute(
            operation: "CreateGUISessionAccessDetails", 
            path: "/ls/api/2016-11-28/create-gui-session-access-details", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates two URLs that are used to access a virtual computer’s graphical user interface (GUI) session. The primary URL initiates a web-based Amazon DCV session to the virtual computer's application. The secondary URL initiates a web-based Amazon DCV session to the virtual computer's operating session.  Use StartGUISession to open the session.
    ///
    /// Parameters:
    ///   - resourceName: The resource name.
    ///   - logger: Logger use during operation
    @inlinable
    public func createGUISessionAccessDetails(
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateGUISessionAccessDetailsResult {
        let input = CreateGUISessionAccessDetailsRequest(
            resourceName: resourceName
        )
        return try await self.createGUISessionAccessDetails(input, logger: logger)
    }

    /// Creates a snapshot of a specific virtual private server, or instance. You can use a snapshot to create a new instance that is based on that snapshot. The create instance snapshot operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createInstanceSnapshot(_ input: CreateInstanceSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateInstanceSnapshotResult {
        try await self.client.execute(
            operation: "CreateInstanceSnapshot", 
            path: "/ls/api/2016-11-28/CreateInstanceSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a snapshot of a specific virtual private server, or instance. You can use a snapshot to create a new instance that is based on that snapshot. The create instance snapshot operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The Lightsail instance on which to base your snapshot.
    ///   - instanceSnapshotName: The name for your new snapshot.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createInstanceSnapshot(
        instanceName: String,
        instanceSnapshotName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateInstanceSnapshotResult {
        let input = CreateInstanceSnapshotRequest(
            instanceName: instanceName, 
            instanceSnapshotName: instanceSnapshotName, 
            tags: tags
        )
        return try await self.createInstanceSnapshot(input, logger: logger)
    }

    /// Creates one or more Amazon Lightsail instances. The create instances operation supports tag-based access control via request tags. For more information, see the Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createInstances(_ input: CreateInstancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateInstancesResult {
        try await self.client.execute(
            operation: "CreateInstances", 
            path: "/ls/api/2016-11-28/CreateInstances", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates one or more Amazon Lightsail instances. The create instances operation supports tag-based access control via request tags. For more information, see the Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - addOns: An array of objects representing the add-ons to enable for the new instance.
    ///   - availabilityZone: The Availability Zone in which to create your instance. Use the following format: us-east-2a (case sensitive). You can get a list of Availability Zones by using the get regions operation. Be sure to add the include Availability Zones parameter to your request.
    ///   - blueprintId: The ID for a virtual private server image (app_wordpress_x_x or app_lamp_x_x). Use the get blueprints operation to return a list of available images (or blueprints).  Use active blueprints when creating new instances. Inactive blueprints are listed to support customers with existing instances and are not necessarily available to create new instances. Blueprints are marked inactive when they become outdated due to operating system updates or new application releases.
    ///   - bundleId: The bundle of specification information for your virtual private server (or instance), including the pricing plan (medium_x_x).
    ///   - instanceNames: The names to use for your new Lightsail instances. Separate multiple values using quotation marks and commas, for example: ["MyFirstInstance","MySecondInstance"]
    ///   - ipAddressType: The IP address type for the instance. The possible values are ipv4 for IPv4 only, ipv6 for IPv6 only, and dualstack for IPv4 and IPv6. The default value is dualstack.
    ///   - keyPairName: The name of your key pair.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - userData: A launch script you can create that configures a server with additional user data. For example, you might want to run apt-get -y update.  Depending on the machine image you choose, the command to get software on your instance varies. Amazon Linux and CentOS use yum, Debian and Ubuntu use apt-get, and FreeBSD uses pkg. For a complete list, see the Amazon Lightsail Developer Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createInstances(
        addOns: [AddOnRequest]? = nil,
        availabilityZone: String,
        blueprintId: String,
        bundleId: String,
        instanceNames: [String],
        ipAddressType: IpAddressType? = nil,
        keyPairName: String? = nil,
        tags: [Tag]? = nil,
        userData: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateInstancesResult {
        let input = CreateInstancesRequest(
            addOns: addOns, 
            availabilityZone: availabilityZone, 
            blueprintId: blueprintId, 
            bundleId: bundleId, 
            instanceNames: instanceNames, 
            ipAddressType: ipAddressType, 
            keyPairName: keyPairName, 
            tags: tags, 
            userData: userData
        )
        return try await self.createInstances(input, logger: logger)
    }

    /// Creates one or more new instances from a manual or automatic snapshot of an instance. The create instances from snapshot operation supports tag-based access control via request tags and resource tags applied to the resource identified by instance snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createInstancesFromSnapshot(_ input: CreateInstancesFromSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateInstancesFromSnapshotResult {
        try await self.client.execute(
            operation: "CreateInstancesFromSnapshot", 
            path: "/ls/api/2016-11-28/CreateInstancesFromSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates one or more new instances from a manual or automatic snapshot of an instance. The create instances from snapshot operation supports tag-based access control via request tags and resource tags applied to the resource identified by instance snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - addOns: An array of objects representing the add-ons to enable for the new instance.
    ///   - attachedDiskMapping: An object containing information about one or more disk mappings.
    ///   - availabilityZone: The Availability Zone where you want to create your instances. Use the following formatting: us-east-2a (case sensitive). You can get a list of Availability Zones by using the get regions operation. Be sure to add the include Availability Zones parameter to your request.
    ///   - bundleId: The bundle of specification information for your virtual private server (or instance), including the pricing plan (micro_x_x).
    ///   - instanceNames: The names for your new instances.
    ///   - instanceSnapshotName: The name of the instance snapshot on which you are basing your new instances. Use the get instance snapshots operation to return information about your existing snapshots. Constraint:   This parameter cannot be defined together with the source instance name parameter. The instance snapshot name and source instance name parameters are mutually exclusive.
    ///   - ipAddressType: The IP address type for the instance. The possible values are ipv4 for IPv4 only, ipv6 for IPv6 only, and dualstack for IPv4 and IPv6. The default value is dualstack.
    ///   - keyPairName: The name for your key pair.
    ///   - restoreDate: The date of the automatic snapshot to use for the new instance. Use the get auto snapshots operation to identify the dates of the available automatic snapshots. Constraints:   Must be specified in YYYY-MM-DD format.   This parameter cannot be defined together with the use latest restorable auto snapshot parameter. The restore date and use latest restorable auto snapshot parameters are mutually exclusive.   Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - sourceInstanceName: The name of the source instance from which the source automatic snapshot was created. Constraints:   This parameter cannot be defined together with the instance snapshot name parameter. The source instance name and instance snapshot name parameters are mutually exclusive.   Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - useLatestRestorableAutoSnapshot: A Boolean value to indicate whether to use the latest available automatic snapshot. Constraints:   This parameter cannot be defined together with the restore date parameter. The use latest restorable auto snapshot and restore date parameters are mutually exclusive.   Define this parameter only when creating a new instance from an automatic snapshot. For more information, see the Amazon Lightsail Developer Guide.
    ///   - userData: You can create a launch script that configures a server with additional user data. For example, apt-get -y update.  Depending on the machine image you choose, the command to get software on your instance varies. Amazon Linux and CentOS use yum, Debian and Ubuntu use apt-get, and FreeBSD uses pkg. For a complete list, see the Amazon Lightsail Developer Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createInstancesFromSnapshot(
        addOns: [AddOnRequest]? = nil,
        attachedDiskMapping: [String: [DiskMap]]? = nil,
        availabilityZone: String,
        bundleId: String,
        instanceNames: [String],
        instanceSnapshotName: String? = nil,
        ipAddressType: IpAddressType? = nil,
        keyPairName: String? = nil,
        restoreDate: String? = nil,
        sourceInstanceName: String? = nil,
        tags: [Tag]? = nil,
        useLatestRestorableAutoSnapshot: Bool? = nil,
        userData: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateInstancesFromSnapshotResult {
        let input = CreateInstancesFromSnapshotRequest(
            addOns: addOns, 
            attachedDiskMapping: attachedDiskMapping, 
            availabilityZone: availabilityZone, 
            bundleId: bundleId, 
            instanceNames: instanceNames, 
            instanceSnapshotName: instanceSnapshotName, 
            ipAddressType: ipAddressType, 
            keyPairName: keyPairName, 
            restoreDate: restoreDate, 
            sourceInstanceName: sourceInstanceName, 
            tags: tags, 
            useLatestRestorableAutoSnapshot: useLatestRestorableAutoSnapshot, 
            userData: userData
        )
        return try await self.createInstancesFromSnapshot(input, logger: logger)
    }

    /// Creates a custom SSH key pair that you can use with an Amazon Lightsail instance.  Use the DownloadDefaultKeyPair action to create a Lightsail default key pair in an Amazon Web Services Region where a default key pair does not currently exist.  The create key pair operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createKeyPair(_ input: CreateKeyPairRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateKeyPairResult {
        try await self.client.execute(
            operation: "CreateKeyPair", 
            path: "/ls/api/2016-11-28/CreateKeyPair", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a custom SSH key pair that you can use with an Amazon Lightsail instance.  Use the DownloadDefaultKeyPair action to create a Lightsail default key pair in an Amazon Web Services Region where a default key pair does not currently exist.  The create key pair operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - keyPairName: The name for your new key pair.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createKeyPair(
        keyPairName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateKeyPairResult {
        let input = CreateKeyPairRequest(
            keyPairName: keyPairName, 
            tags: tags
        )
        return try await self.createKeyPair(input, logger: logger)
    }

    /// Creates a Lightsail load balancer. To learn more about deciding whether to load balance your application, see Configure your Lightsail instances for load balancing. You can create up to 5 load balancers per AWS Region in your account. When you create a load balancer, you can specify a unique name and port settings. To change additional load balancer settings, use the UpdateLoadBalancerAttribute operation. The create load balancer operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createLoadBalancer(_ input: CreateLoadBalancerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateLoadBalancerResult {
        try await self.client.execute(
            operation: "CreateLoadBalancer", 
            path: "/ls/api/2016-11-28/CreateLoadBalancer", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a Lightsail load balancer. To learn more about deciding whether to load balance your application, see Configure your Lightsail instances for load balancing. You can create up to 5 load balancers per AWS Region in your account. When you create a load balancer, you can specify a unique name and port settings. To change additional load balancer settings, use the UpdateLoadBalancerAttribute operation. The create load balancer operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - certificateAlternativeNames: The optional alternative domains and subdomains to use with your SSL/TLS certificate (www.example.com, example.com, m.example.com, blog.example.com).
    ///   - certificateDomainName: The domain name with which your certificate is associated (example.com). If you specify certificateDomainName, then certificateName is required (and vice-versa).
    ///   - certificateName: The name of the SSL/TLS certificate. If you specify certificateName, then certificateDomainName is required (and vice-versa).
    ///   - healthCheckPath: The path you provided to perform the load balancer health check. If you didn't specify a health check path, Lightsail uses the root path of your website ("/"). You may want to specify a custom health check path other than the root of your application if your home page loads slowly or has a lot of media or scripting on it.
    ///   - instancePort: The instance port where you're creating your load balancer.
    ///   - ipAddressType: The IP address type for the load balancer. The possible values are ipv4 for IPv4 only, ipv6 for IPv6 only, and dualstack for IPv4 and IPv6. The default value is dualstack.
    ///   - loadBalancerName: The name of your load balancer.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - tlsPolicyName: The name of the TLS policy to apply to the load balancer. Use the GetLoadBalancerTlsPolicies action to get a list of TLS policy names that you can specify. For more information about load balancer TLS policies, see Configuring TLS security policies on your Amazon Lightsail load balancers in the Amazon Lightsail Developer Guide.
    ///   - logger: Logger use during operation
    @inlinable
    public func createLoadBalancer(
        certificateAlternativeNames: [String]? = nil,
        certificateDomainName: String? = nil,
        certificateName: String? = nil,
        healthCheckPath: String? = nil,
        instancePort: Int = 0,
        ipAddressType: IpAddressType? = nil,
        loadBalancerName: String,
        tags: [Tag]? = nil,
        tlsPolicyName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateLoadBalancerResult {
        let input = CreateLoadBalancerRequest(
            certificateAlternativeNames: certificateAlternativeNames, 
            certificateDomainName: certificateDomainName, 
            certificateName: certificateName, 
            healthCheckPath: healthCheckPath, 
            instancePort: instancePort, 
            ipAddressType: ipAddressType, 
            loadBalancerName: loadBalancerName, 
            tags: tags, 
            tlsPolicyName: tlsPolicyName
        )
        return try await self.createLoadBalancer(input, logger: logger)
    }

    /// Creates an SSL/TLS certificate for an Amazon Lightsail load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL). The CreateLoadBalancerTlsCertificate operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createLoadBalancerTlsCertificate(_ input: CreateLoadBalancerTlsCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateLoadBalancerTlsCertificateResult {
        try await self.client.execute(
            operation: "CreateLoadBalancerTlsCertificate", 
            path: "/ls/api/2016-11-28/CreateLoadBalancerTlsCertificate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an SSL/TLS certificate for an Amazon Lightsail load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL). The CreateLoadBalancerTlsCertificate operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - certificateAlternativeNames: An array of strings listing alternative domains and subdomains for your SSL/TLS certificate. Lightsail will de-dupe the names for you. You can have a maximum of 9 alternative names (in addition to the 1 primary domain). We do not support wildcards (*.example.com).
    ///   - certificateDomainName: The domain name (example.com) for your SSL/TLS certificate.
    ///   - certificateName: The SSL/TLS certificate name. You can have up to 10 certificates in your account at one time. Each Lightsail load balancer can have up to 2 certificates associated with it at one time. There is also an overall limit to the number of certificates that can be issue in a 365-day period. For more information, see Limits.
    ///   - loadBalancerName: The load balancer name where you want to create the SSL/TLS certificate.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createLoadBalancerTlsCertificate(
        certificateAlternativeNames: [String]? = nil,
        certificateDomainName: String,
        certificateName: String,
        loadBalancerName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateLoadBalancerTlsCertificateResult {
        let input = CreateLoadBalancerTlsCertificateRequest(
            certificateAlternativeNames: certificateAlternativeNames, 
            certificateDomainName: certificateDomainName, 
            certificateName: certificateName, 
            loadBalancerName: loadBalancerName, 
            tags: tags
        )
        return try await self.createLoadBalancerTlsCertificate(input, logger: logger)
    }

    /// Creates a new database in Amazon Lightsail. The create relational database operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createRelationalDatabase(_ input: CreateRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRelationalDatabaseResult {
        try await self.client.execute(
            operation: "CreateRelationalDatabase", 
            path: "/ls/api/2016-11-28/CreateRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new database in Amazon Lightsail. The create relational database operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - availabilityZone: The Availability Zone in which to create your new database. Use the us-east-2a case-sensitive format. You can get a list of Availability Zones by using the get regions operation. Be sure to add the include relational database Availability Zones parameter to your request.
    ///   - masterDatabaseName: The meaning of this parameter differs according to the database engine you use.  MySQL  The name of the database to create when the Lightsail database resource is created. If this parameter isn't specified, no database is created in the database resource. Constraints:   Must contain 1 to 64 letters or numbers.   Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0- 9).   Can't be a word reserved by the specified database engine. For more information about reserved words in MySQL, see the Keywords and Reserved Words articles for MySQL 5.6, MySQL 5.7, and MySQL 8.0.    PostgreSQL  The name of the database to create when the Lightsail database resource is created. If this parameter isn't specified, a database named postgres is created in the database resource. Constraints:   Must contain 1 to 63 letters or numbers.   Must begin with a letter. Subsequent characters can be letters, underscores, or digits (0- 9).   Can't be a word reserved by the specified database engine. For more information about reserved words in PostgreSQL, see the SQL Key Words articles for PostgreSQL 9.6, PostgreSQL 10, PostgreSQL 11, and PostgreSQL 12.
    ///   - masterUsername: The name for the master user.  MySQL  Constraints:   Required for MySQL.   Must be 1 to 16 letters or numbers. Can contain underscores.   First character must be a letter.   Can't be a reserved word for the chosen database engine. For more information about reserved words in MySQL 5.6 or 5.7, see the Keywords and Reserved Words articles for MySQL 5.6, MySQL 5.7, or MySQL 8.0.    PostgreSQL  Constraints:   Required for PostgreSQL.   Must be 1 to 63 letters or numbers. Can contain underscores.   First character must be a letter.   Can't be a reserved word for the chosen database engine. For more information about reserved words in MySQL 5.6 or 5.7, see the Keywords and Reserved Words articles for PostgreSQL 9.6, PostgreSQL 10, PostgreSQL 11, and PostgreSQL 12.
    ///   - masterUserPassword: The password for the master user. The password can include any printable ASCII character except "/", """, or "@". It cannot contain spaces.  MySQL  Constraints: Must contain from 8 to 41 characters.  PostgreSQL  Constraints: Must contain from 8 to 128 characters.
    ///   - preferredBackupWindow: The daily time range during which automated backups are created for your new database if automated backups are enabled. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region. For more information about the preferred backup window time blocks for each region, see the Working With Backups guide in the Amazon Relational Database Service documentation. Constraints:   Must be in the hh24:mi-hh24:mi format. Example: 16:00-16:30    Specified in Coordinated Universal Time (UTC).   Must not conflict with the preferred maintenance window.   Must be at least 30 minutes.
    ///   - preferredMaintenanceWindow: The weekly time range during which system maintenance can occur on your new database. The default is a 30-minute window selected at random from an 8-hour block of time for each AWS Region, occurring on a random day of the week. Constraints:   Must be in the ddd:hh24:mi-ddd:hh24:mi format.   Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun.   Must be at least 30 minutes.   Specified in Coordinated Universal Time (UTC).   Example: Tue:17:00-Tue:17:30
    ///   - publiclyAccessible: Specifies the accessibility options for your new database. A value of true specifies a database that is available to resources outside of your Lightsail account. A value of false specifies a database that is available only to your Lightsail resources in the same region as your database.
    ///   - relationalDatabaseBlueprintId: The blueprint ID for your new database. A blueprint describes the major engine version of a database. You can get a list of database blueprints IDs by using the get relational database blueprints operation.
    ///   - relationalDatabaseBundleId: The bundle ID for your new database. A bundle describes the performance specifications for your database. You can get a list of database bundle IDs by using the get relational database bundles operation.
    ///   - relationalDatabaseName: The name to use for your new Lightsail database resource. Constraints:   Must contain from 2 to 255 alphanumeric characters, or hyphens.   The first and last character must be a letter or number.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRelationalDatabase(
        availabilityZone: String? = nil,
        masterDatabaseName: String,
        masterUsername: String,
        masterUserPassword: String? = nil,
        preferredBackupWindow: String? = nil,
        preferredMaintenanceWindow: String? = nil,
        publiclyAccessible: Bool? = nil,
        relationalDatabaseBlueprintId: String,
        relationalDatabaseBundleId: String,
        relationalDatabaseName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRelationalDatabaseResult {
        let input = CreateRelationalDatabaseRequest(
            availabilityZone: availabilityZone, 
            masterDatabaseName: masterDatabaseName, 
            masterUsername: masterUsername, 
            masterUserPassword: masterUserPassword, 
            preferredBackupWindow: preferredBackupWindow, 
            preferredMaintenanceWindow: preferredMaintenanceWindow, 
            publiclyAccessible: publiclyAccessible, 
            relationalDatabaseBlueprintId: relationalDatabaseBlueprintId, 
            relationalDatabaseBundleId: relationalDatabaseBundleId, 
            relationalDatabaseName: relationalDatabaseName, 
            tags: tags
        )
        return try await self.createRelationalDatabase(input, logger: logger)
    }

    /// Creates a new database from an existing database snapshot in Amazon Lightsail. You can create a new database from a snapshot in if something goes wrong with your original database, or to change it to a different plan, such as a high availability or standard plan. The create relational database from snapshot operation supports tag-based access control via request tags and resource tags applied to the resource identified by relationalDatabaseSnapshotName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createRelationalDatabaseFromSnapshot(_ input: CreateRelationalDatabaseFromSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRelationalDatabaseFromSnapshotResult {
        try await self.client.execute(
            operation: "CreateRelationalDatabaseFromSnapshot", 
            path: "/ls/api/2016-11-28/CreateRelationalDatabaseFromSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new database from an existing database snapshot in Amazon Lightsail. You can create a new database from a snapshot in if something goes wrong with your original database, or to change it to a different plan, such as a high availability or standard plan. The create relational database from snapshot operation supports tag-based access control via request tags and resource tags applied to the resource identified by relationalDatabaseSnapshotName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - availabilityZone: The Availability Zone in which to create your new database. Use the us-east-2a case-sensitive format. You can get a list of Availability Zones by using the get regions operation. Be sure to add the include relational database Availability Zones parameter to your request.
    ///   - publiclyAccessible: Specifies the accessibility options for your new database. A value of true specifies a database that is available to resources outside of your Lightsail account. A value of false specifies a database that is available only to your Lightsail resources in the same region as your database.
    ///   - relationalDatabaseBundleId: The bundle ID for your new database. A bundle describes the performance specifications for your database. You can get a list of database bundle IDs by using the get relational database bundles operation. When creating a new database from a snapshot, you cannot choose a bundle that is smaller than the bundle of the source database.
    ///   - relationalDatabaseName: The name to use for your new Lightsail database resource. Constraints:   Must contain from 2 to 255 alphanumeric characters, or hyphens.   The first and last character must be a letter or number.
    ///   - relationalDatabaseSnapshotName: The name of the database snapshot from which to create your new database.
    ///   - restoreTime: The date and time to restore your database from. Constraints:   Must be before the latest restorable time for the database.   Cannot be specified if the use latest restorable time parameter is true.   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use a restore time of October 1, 2018, at 8 PM UTC, then you input 1538424000 as the restore time.
    ///   - sourceRelationalDatabaseName: The name of the source database.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - useLatestRestorableTime: Specifies whether your database is restored from the latest backup time. A value of true restores from the latest backup time.  Default: false  Constraints: Cannot be specified if the restore time parameter is provided.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRelationalDatabaseFromSnapshot(
        availabilityZone: String? = nil,
        publiclyAccessible: Bool? = nil,
        relationalDatabaseBundleId: String? = nil,
        relationalDatabaseName: String,
        relationalDatabaseSnapshotName: String? = nil,
        restoreTime: Date? = nil,
        sourceRelationalDatabaseName: String? = nil,
        tags: [Tag]? = nil,
        useLatestRestorableTime: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRelationalDatabaseFromSnapshotResult {
        let input = CreateRelationalDatabaseFromSnapshotRequest(
            availabilityZone: availabilityZone, 
            publiclyAccessible: publiclyAccessible, 
            relationalDatabaseBundleId: relationalDatabaseBundleId, 
            relationalDatabaseName: relationalDatabaseName, 
            relationalDatabaseSnapshotName: relationalDatabaseSnapshotName, 
            restoreTime: restoreTime, 
            sourceRelationalDatabaseName: sourceRelationalDatabaseName, 
            tags: tags, 
            useLatestRestorableTime: useLatestRestorableTime
        )
        return try await self.createRelationalDatabaseFromSnapshot(input, logger: logger)
    }

    /// Creates a snapshot of your database in Amazon Lightsail. You can use snapshots for backups, to make copies of a database, and to save data before deleting a database. The create relational database snapshot operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func createRelationalDatabaseSnapshot(_ input: CreateRelationalDatabaseSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateRelationalDatabaseSnapshotResult {
        try await self.client.execute(
            operation: "CreateRelationalDatabaseSnapshot", 
            path: "/ls/api/2016-11-28/CreateRelationalDatabaseSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a snapshot of your database in Amazon Lightsail. You can use snapshots for backups, to make copies of a database, and to save data before deleting a database. The create relational database snapshot operation supports tag-based access control via request tags. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - relationalDatabaseName: The name of the database on which to base your new snapshot.
    ///   - relationalDatabaseSnapshotName: The name for your new database snapshot. Constraints:   Must contain from 2 to 255 alphanumeric characters, or hyphens.   The first and last character must be a letter or number.
    ///   - tags: The tag keys and optional values to add to the resource during create. Use the TagResource action to tag a resource after it's created.
    ///   - logger: Logger use during operation
    @inlinable
    public func createRelationalDatabaseSnapshot(
        relationalDatabaseName: String,
        relationalDatabaseSnapshotName: String,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateRelationalDatabaseSnapshotResult {
        let input = CreateRelationalDatabaseSnapshotRequest(
            relationalDatabaseName: relationalDatabaseName, 
            relationalDatabaseSnapshotName: relationalDatabaseSnapshotName, 
            tags: tags
        )
        return try await self.createRelationalDatabaseSnapshot(input, logger: logger)
    }

    /// Deletes an alarm. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail.
    @Sendable
    @inlinable
    public func deleteAlarm(_ input: DeleteAlarmRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAlarmResult {
        try await self.client.execute(
            operation: "DeleteAlarm", 
            path: "/ls/api/2016-11-28/DeleteAlarm", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an alarm. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - alarmName: The name of the alarm to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAlarm(
        alarmName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAlarmResult {
        let input = DeleteAlarmRequest(
            alarmName: alarmName
        )
        return try await self.deleteAlarm(input, logger: logger)
    }

    /// Deletes an automatic snapshot of an instance or disk. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteAutoSnapshot(_ input: DeleteAutoSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteAutoSnapshotResult {
        try await self.client.execute(
            operation: "DeleteAutoSnapshot", 
            path: "/ls/api/2016-11-28/DeleteAutoSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an automatic snapshot of an instance or disk. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - date: The date of the automatic snapshot to delete in YYYY-MM-DD format. Use the get auto snapshots operation to get the available automatic snapshots for a resource.
    ///   - resourceName: The name of the source instance or disk from which to delete the automatic snapshot.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteAutoSnapshot(
        date: String,
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteAutoSnapshotResult {
        let input = DeleteAutoSnapshotRequest(
            date: date, 
            resourceName: resourceName
        )
        return try await self.deleteAutoSnapshot(input, logger: logger)
    }

    /// Deletes a Amazon Lightsail bucket.  When you delete your bucket, the bucket name is released and can be reused for a new bucket in your account or another Amazon Web Services account.
    @Sendable
    @inlinable
    public func deleteBucket(_ input: DeleteBucketRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBucketResult {
        try await self.client.execute(
            operation: "DeleteBucket", 
            path: "/ls/api/2016-11-28/DeleteBucket", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Amazon Lightsail bucket.  When you delete your bucket, the bucket name is released and can be reused for a new bucket in your account or another Amazon Web Services account.
    ///
    /// Parameters:
    ///   - bucketName: The name of the bucket to delete. Use the GetBuckets action to get a list of bucket names that you can specify.
    ///   - forceDelete: A Boolean value that indicates whether to force delete the bucket. You must force delete the bucket if it has one of the following conditions:   The bucket is the origin of a distribution.   The bucket has instances that were granted access to it using the SetResourceAccessForBucket action.   The bucket has objects.   The bucket has access keys.    Force deleting a bucket might impact other resources that rely on the bucket, such as instances, distributions, or software that use the issued access keys.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBucket(
        bucketName: String,
        forceDelete: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBucketResult {
        let input = DeleteBucketRequest(
            bucketName: bucketName, 
            forceDelete: forceDelete
        )
        return try await self.deleteBucket(input, logger: logger)
    }

    /// Deletes an access key for the specified Amazon Lightsail bucket. We recommend that you delete an access key if the secret access key is compromised. For more information about access keys, see Creating access keys for a bucket in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteBucketAccessKey(_ input: DeleteBucketAccessKeyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteBucketAccessKeyResult {
        try await self.client.execute(
            operation: "DeleteBucketAccessKey", 
            path: "/ls/api/2016-11-28/DeleteBucketAccessKey", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an access key for the specified Amazon Lightsail bucket. We recommend that you delete an access key if the secret access key is compromised. For more information about access keys, see Creating access keys for a bucket in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - accessKeyId: The ID of the access key to delete. Use the GetBucketAccessKeys action to get a list of access key IDs that you can specify.
    ///   - bucketName: The name of the bucket that the access key belongs to.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteBucketAccessKey(
        accessKeyId: String,
        bucketName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteBucketAccessKeyResult {
        let input = DeleteBucketAccessKeyRequest(
            accessKeyId: accessKeyId, 
            bucketName: bucketName
        )
        return try await self.deleteBucketAccessKey(input, logger: logger)
    }

    /// Deletes an SSL/TLS certificate for your Amazon Lightsail content delivery network (CDN) distribution. Certificates that are currently attached to a distribution cannot be deleted. Use the DetachCertificateFromDistribution action to detach a certificate from a distribution.
    @Sendable
    @inlinable
    public func deleteCertificate(_ input: DeleteCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteCertificateResult {
        try await self.client.execute(
            operation: "DeleteCertificate", 
            path: "/ls/api/2016-11-28/DeleteCertificate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an SSL/TLS certificate for your Amazon Lightsail content delivery network (CDN) distribution. Certificates that are currently attached to a distribution cannot be deleted. Use the DetachCertificateFromDistribution action to detach a certificate from a distribution.
    ///
    /// Parameters:
    ///   - certificateName: The name of the certificate to delete. Use the GetCertificates action to get a list of certificate names that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteCertificate(
        certificateName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteCertificateResult {
        let input = DeleteCertificateRequest(
            certificateName: certificateName
        )
        return try await self.deleteCertificate(input, logger: logger)
    }

    /// Deletes a contact method. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail.
    @Sendable
    @inlinable
    public func deleteContactMethod(_ input: DeleteContactMethodRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteContactMethodResult {
        try await self.client.execute(
            operation: "DeleteContactMethod", 
            path: "/ls/api/2016-11-28/DeleteContactMethod", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a contact method. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - protocol: The protocol that will be deleted, such as Email or SMS (text messaging).  To delete an Email and an SMS contact method if you added both, you must run separate DeleteContactMethod actions to delete each protocol.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteContactMethod(
        protocol: ContactProtocol,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteContactMethodResult {
        let input = DeleteContactMethodRequest(
            protocol: `protocol`
        )
        return try await self.deleteContactMethod(input, logger: logger)
    }

    /// Deletes a container image that is registered to your Amazon Lightsail container service.
    @Sendable
    @inlinable
    public func deleteContainerImage(_ input: DeleteContainerImageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteContainerImageResult {
        try await self.client.execute(
            operation: "DeleteContainerImage", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/images/{image}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a container image that is registered to your Amazon Lightsail container service.
    ///
    /// Parameters:
    ///   - image: The name of the container image to delete from the container service. Use the GetContainerImages action to get the name of the container images that are registered to a container service.  Container images sourced from your Lightsail container service, that are registered and stored on your service, start with a colon (:). For example, :container-service-1.mystaticwebsite.1. Container images sourced from a public registry like Docker Hub don't start with a colon. For example, nginx:latest or nginx.
    ///   - serviceName: The name of the container service for which to delete a registered container image.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteContainerImage(
        image: String,
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteContainerImageResult {
        let input = DeleteContainerImageRequest(
            image: image, 
            serviceName: serviceName
        )
        return try await self.deleteContainerImage(input, logger: logger)
    }

    /// Deletes your Amazon Lightsail container service.
    @Sendable
    @inlinable
    public func deleteContainerService(_ input: DeleteContainerServiceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteContainerServiceResult {
        try await self.client.execute(
            operation: "DeleteContainerService", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}", 
            httpMethod: .DELETE, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes your Amazon Lightsail container service.
    ///
    /// Parameters:
    ///   - serviceName: The name of the container service to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteContainerService(
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteContainerServiceResult {
        let input = DeleteContainerServiceRequest(
            serviceName: serviceName
        )
        return try await self.deleteContainerService(input, logger: logger)
    }

    /// Deletes the specified block storage disk. The disk must be in the available state (not attached to a Lightsail instance).  The disk may remain in the deleting state for several minutes.  The delete disk operation supports tag-based access control via resource tags applied to the resource identified by disk name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteDisk(_ input: DeleteDiskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDiskResult {
        try await self.client.execute(
            operation: "DeleteDisk", 
            path: "/ls/api/2016-11-28/DeleteDisk", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified block storage disk. The disk must be in the available state (not attached to a Lightsail instance).  The disk may remain in the deleting state for several minutes.  The delete disk operation supports tag-based access control via resource tags applied to the resource identified by disk name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - diskName: The unique name of the disk you want to delete (my-disk).
    ///   - forceDeleteAddOns: A Boolean value to indicate whether to delete all add-ons for the disk.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDisk(
        diskName: String,
        forceDeleteAddOns: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDiskResult {
        let input = DeleteDiskRequest(
            diskName: diskName, 
            forceDeleteAddOns: forceDeleteAddOns
        )
        return try await self.deleteDisk(input, logger: logger)
    }

    /// Deletes the specified disk snapshot. When you make periodic snapshots of a disk, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the disk. The delete disk snapshot operation supports tag-based access control via resource tags applied to the resource identified by disk snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteDiskSnapshot(_ input: DeleteDiskSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDiskSnapshotResult {
        try await self.client.execute(
            operation: "DeleteDiskSnapshot", 
            path: "/ls/api/2016-11-28/DeleteDiskSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified disk snapshot. When you make periodic snapshots of a disk, the snapshots are incremental, and only the blocks on the device that have changed since your last snapshot are saved in the new snapshot. When you delete a snapshot, only the data not needed for any other snapshot is removed. So regardless of which prior snapshots have been deleted, all active snapshots will have access to all the information needed to restore the disk. The delete disk snapshot operation supports tag-based access control via resource tags applied to the resource identified by disk snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - diskSnapshotName: The name of the disk snapshot you want to delete (my-disk-snapshot).
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDiskSnapshot(
        diskSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDiskSnapshotResult {
        let input = DeleteDiskSnapshotRequest(
            diskSnapshotName: diskSnapshotName
        )
        return try await self.deleteDiskSnapshot(input, logger: logger)
    }

    /// Deletes your Amazon Lightsail content delivery network (CDN) distribution.
    @Sendable
    @inlinable
    public func deleteDistribution(_ input: DeleteDistributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDistributionResult {
        try await self.client.execute(
            operation: "DeleteDistribution", 
            path: "/ls/api/2016-11-28/DeleteDistribution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes your Amazon Lightsail content delivery network (CDN) distribution.
    ///
    /// Parameters:
    ///   - distributionName: The name of the distribution to delete. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDistribution(
        distributionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDistributionResult {
        let input = DeleteDistributionRequest(
            distributionName: distributionName
        )
        return try await self.deleteDistribution(input, logger: logger)
    }

    /// Deletes the specified domain recordset and all of its domain records. The delete domain operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteDomain(_ input: DeleteDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDomainResult {
        try await self.client.execute(
            operation: "DeleteDomain", 
            path: "/ls/api/2016-11-28/DeleteDomain", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified domain recordset and all of its domain records. The delete domain operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - domainName: The specific domain name to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDomain(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDomainResult {
        let input = DeleteDomainRequest(
            domainName: domainName
        )
        return try await self.deleteDomain(input, logger: logger)
    }

    /// Deletes a specific domain entry. The delete domain entry operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteDomainEntry(_ input: DeleteDomainEntryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDomainEntryResult {
        try await self.client.execute(
            operation: "DeleteDomainEntry", 
            path: "/ls/api/2016-11-28/DeleteDomainEntry", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a specific domain entry. The delete domain entry operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - domainEntry: An array of key-value pairs containing information about your domain entries.
    ///   - domainName: The name of the domain entry to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDomainEntry(
        domainEntry: DomainEntry,
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDomainEntryResult {
        let input = DeleteDomainEntryRequest(
            domainEntry: domainEntry, 
            domainName: domainName
        )
        return try await self.deleteDomainEntry(input, logger: logger)
    }

    /// Deletes an Amazon Lightsail instance. The delete instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteInstance(_ input: DeleteInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInstanceResult {
        try await self.client.execute(
            operation: "DeleteInstance", 
            path: "/ls/api/2016-11-28/DeleteInstance", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an Amazon Lightsail instance. The delete instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - forceDeleteAddOns: A Boolean value to indicate whether to delete all add-ons for the instance.
    ///   - instanceName: The name of the instance to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInstance(
        forceDeleteAddOns: Bool? = nil,
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInstanceResult {
        let input = DeleteInstanceRequest(
            forceDeleteAddOns: forceDeleteAddOns, 
            instanceName: instanceName
        )
        return try await self.deleteInstance(input, logger: logger)
    }

    /// Deletes a specific snapshot of a virtual private server (or instance). The delete instance snapshot operation supports tag-based access control via resource tags applied to the resource identified by instance snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteInstanceSnapshot(_ input: DeleteInstanceSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteInstanceSnapshotResult {
        try await self.client.execute(
            operation: "DeleteInstanceSnapshot", 
            path: "/ls/api/2016-11-28/DeleteInstanceSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a specific snapshot of a virtual private server (or instance). The delete instance snapshot operation supports tag-based access control via resource tags applied to the resource identified by instance snapshot name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceSnapshotName: The name of the snapshot to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteInstanceSnapshot(
        instanceSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteInstanceSnapshotResult {
        let input = DeleteInstanceSnapshotRequest(
            instanceSnapshotName: instanceSnapshotName
        )
        return try await self.deleteInstanceSnapshot(input, logger: logger)
    }

    /// Deletes the specified key pair by removing the public key from Amazon Lightsail. You can delete key pairs that were created using the ImportKeyPair and CreateKeyPair actions, as well as the Lightsail default key pair. A new default key pair will not be created unless you launch an instance without specifying a custom key pair, or you call the DownloadDefaultKeyPair API.  The delete key pair operation supports tag-based access control via resource tags applied to the resource identified by key pair name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteKeyPair(_ input: DeleteKeyPairRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteKeyPairResult {
        try await self.client.execute(
            operation: "DeleteKeyPair", 
            path: "/ls/api/2016-11-28/DeleteKeyPair", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified key pair by removing the public key from Amazon Lightsail. You can delete key pairs that were created using the ImportKeyPair and CreateKeyPair actions, as well as the Lightsail default key pair. A new default key pair will not be created unless you launch an instance without specifying a custom key pair, or you call the DownloadDefaultKeyPair API.  The delete key pair operation supports tag-based access control via resource tags applied to the resource identified by key pair name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - expectedFingerprint: The RSA fingerprint of the Lightsail default key pair to delete.  The expectedFingerprint parameter is required only when specifying to delete a Lightsail default key pair.
    ///   - keyPairName: The name of the key pair to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteKeyPair(
        expectedFingerprint: String? = nil,
        keyPairName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteKeyPairResult {
        let input = DeleteKeyPairRequest(
            expectedFingerprint: expectedFingerprint, 
            keyPairName: keyPairName
        )
        return try await self.deleteKeyPair(input, logger: logger)
    }

    /// Deletes the known host key or certificate used by the Amazon Lightsail browser-based SSH or RDP clients to authenticate an instance. This operation enables the Lightsail browser-based SSH or RDP clients to connect to the instance after a host key mismatch.  Perform this operation only if you were expecting the host key or certificate mismatch or if you are familiar with the new host key or certificate on the instance. For more information, see Troubleshooting connection issues when using the Amazon Lightsail browser-based SSH or RDP client.
    @Sendable
    @inlinable
    public func deleteKnownHostKeys(_ input: DeleteKnownHostKeysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteKnownHostKeysResult {
        try await self.client.execute(
            operation: "DeleteKnownHostKeys", 
            path: "/ls/api/2016-11-28/DeleteKnownHostKeys", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the known host key or certificate used by the Amazon Lightsail browser-based SSH or RDP clients to authenticate an instance. This operation enables the Lightsail browser-based SSH or RDP clients to connect to the instance after a host key mismatch.  Perform this operation only if you were expecting the host key or certificate mismatch or if you are familiar with the new host key or certificate on the instance. For more information, see Troubleshooting connection issues when using the Amazon Lightsail browser-based SSH or RDP client.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance for which you want to reset the host key or certificate.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteKnownHostKeys(
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteKnownHostKeysResult {
        let input = DeleteKnownHostKeysRequest(
            instanceName: instanceName
        )
        return try await self.deleteKnownHostKeys(input, logger: logger)
    }

    /// Deletes a Lightsail load balancer and all its associated SSL/TLS certificates. Once the load balancer is deleted, you will need to create a new load balancer, create a new certificate, and verify domain ownership again. The delete load balancer operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteLoadBalancer(_ input: DeleteLoadBalancerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteLoadBalancerResult {
        try await self.client.execute(
            operation: "DeleteLoadBalancer", 
            path: "/ls/api/2016-11-28/DeleteLoadBalancer", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a Lightsail load balancer and all its associated SSL/TLS certificates. Once the load balancer is deleted, you will need to create a new load balancer, create a new certificate, and verify domain ownership again. The delete load balancer operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - loadBalancerName: The name of the load balancer you want to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteLoadBalancer(
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteLoadBalancerResult {
        let input = DeleteLoadBalancerRequest(
            loadBalancerName: loadBalancerName
        )
        return try await self.deleteLoadBalancer(input, logger: logger)
    }

    /// Deletes an SSL/TLS certificate associated with a Lightsail load balancer. The DeleteLoadBalancerTlsCertificate operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteLoadBalancerTlsCertificate(_ input: DeleteLoadBalancerTlsCertificateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteLoadBalancerTlsCertificateResult {
        try await self.client.execute(
            operation: "DeleteLoadBalancerTlsCertificate", 
            path: "/ls/api/2016-11-28/DeleteLoadBalancerTlsCertificate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an SSL/TLS certificate associated with a Lightsail load balancer. The DeleteLoadBalancerTlsCertificate operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - certificateName: The SSL/TLS certificate name.
    ///   - force: When true, forces the deletion of an SSL/TLS certificate. There can be two certificates associated with a Lightsail load balancer: the primary and the backup. The force parameter is required when the primary SSL/TLS certificate is in use by an instance attached to the load balancer.
    ///   - loadBalancerName: The load balancer name.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteLoadBalancerTlsCertificate(
        certificateName: String,
        force: Bool? = nil,
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteLoadBalancerTlsCertificateResult {
        let input = DeleteLoadBalancerTlsCertificateRequest(
            certificateName: certificateName, 
            force: force, 
            loadBalancerName: loadBalancerName
        )
        return try await self.deleteLoadBalancerTlsCertificate(input, logger: logger)
    }

    /// Deletes a database in Amazon Lightsail. The delete relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteRelationalDatabase(_ input: DeleteRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteRelationalDatabaseResult {
        try await self.client.execute(
            operation: "DeleteRelationalDatabase", 
            path: "/ls/api/2016-11-28/DeleteRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a database in Amazon Lightsail. The delete relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - finalRelationalDatabaseSnapshotName: The name of the database snapshot created if skip final snapshot is false, which is the default value for that parameter.  Specifying this parameter and also specifying the skip final snapshot parameter to true results in an error.  Constraints:   Must contain from 2 to 255 alphanumeric characters, or hyphens.   The first and last character must be a letter or number.
    ///   - relationalDatabaseName: The name of the database that you are deleting.
    ///   - skipFinalSnapshot: Determines whether a final database snapshot is created before your database is deleted. If true is specified, no database snapshot is created. If false is specified, a database snapshot is created before your database is deleted. You must specify the final relational database snapshot name parameter if the skip final snapshot parameter is false. Default: false
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRelationalDatabase(
        finalRelationalDatabaseSnapshotName: String? = nil,
        relationalDatabaseName: String,
        skipFinalSnapshot: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteRelationalDatabaseResult {
        let input = DeleteRelationalDatabaseRequest(
            finalRelationalDatabaseSnapshotName: finalRelationalDatabaseSnapshotName, 
            relationalDatabaseName: relationalDatabaseName, 
            skipFinalSnapshot: skipFinalSnapshot
        )
        return try await self.deleteRelationalDatabase(input, logger: logger)
    }

    /// Deletes a database snapshot in Amazon Lightsail. The delete relational database snapshot operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func deleteRelationalDatabaseSnapshot(_ input: DeleteRelationalDatabaseSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteRelationalDatabaseSnapshotResult {
        try await self.client.execute(
            operation: "DeleteRelationalDatabaseSnapshot", 
            path: "/ls/api/2016-11-28/DeleteRelationalDatabaseSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a database snapshot in Amazon Lightsail. The delete relational database snapshot operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - relationalDatabaseSnapshotName: The name of the database snapshot that you are deleting.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteRelationalDatabaseSnapshot(
        relationalDatabaseSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteRelationalDatabaseSnapshotResult {
        let input = DeleteRelationalDatabaseSnapshotRequest(
            relationalDatabaseSnapshotName: relationalDatabaseSnapshotName
        )
        return try await self.deleteRelationalDatabaseSnapshot(input, logger: logger)
    }

    /// Detaches an SSL/TLS certificate from your Amazon Lightsail content delivery network (CDN) distribution. After the certificate is detached, your distribution stops accepting traffic for all of the domains that are associated with the certificate.
    @Sendable
    @inlinable
    public func detachCertificateFromDistribution(_ input: DetachCertificateFromDistributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachCertificateFromDistributionResult {
        try await self.client.execute(
            operation: "DetachCertificateFromDistribution", 
            path: "/ls/api/2016-11-28/DetachCertificateFromDistribution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches an SSL/TLS certificate from your Amazon Lightsail content delivery network (CDN) distribution. After the certificate is detached, your distribution stops accepting traffic for all of the domains that are associated with the certificate.
    ///
    /// Parameters:
    ///   - distributionName: The name of the distribution from which to detach the certificate. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachCertificateFromDistribution(
        distributionName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachCertificateFromDistributionResult {
        let input = DetachCertificateFromDistributionRequest(
            distributionName: distributionName
        )
        return try await self.detachCertificateFromDistribution(input, logger: logger)
    }

    /// Detaches a stopped block storage disk from a Lightsail instance. Make sure to unmount any file systems on the device within your operating system before stopping the instance and detaching the disk. The detach disk operation supports tag-based access control via resource tags applied to the resource identified by disk name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func detachDisk(_ input: DetachDiskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachDiskResult {
        try await self.client.execute(
            operation: "DetachDisk", 
            path: "/ls/api/2016-11-28/DetachDisk", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches a stopped block storage disk from a Lightsail instance. Make sure to unmount any file systems on the device within your operating system before stopping the instance and detaching the disk. The detach disk operation supports tag-based access control via resource tags applied to the resource identified by disk name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - diskName: The unique name of the disk you want to detach from your instance (my-disk).
    ///   - logger: Logger use during operation
    @inlinable
    public func detachDisk(
        diskName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachDiskResult {
        let input = DetachDiskRequest(
            diskName: diskName
        )
        return try await self.detachDisk(input, logger: logger)
    }

    /// Detaches the specified instances from a Lightsail load balancer. This operation waits until the instances are no longer needed before they are detached from the load balancer. The detach instances from load balancer operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func detachInstancesFromLoadBalancer(_ input: DetachInstancesFromLoadBalancerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachInstancesFromLoadBalancerResult {
        try await self.client.execute(
            operation: "DetachInstancesFromLoadBalancer", 
            path: "/ls/api/2016-11-28/DetachInstancesFromLoadBalancer", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches the specified instances from a Lightsail load balancer. This operation waits until the instances are no longer needed before they are detached from the load balancer. The detach instances from load balancer operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceNames: An array of strings containing the names of the instances you want to detach from the load balancer.
    ///   - loadBalancerName: The name of the Lightsail load balancer.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachInstancesFromLoadBalancer(
        instanceNames: [String],
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachInstancesFromLoadBalancerResult {
        let input = DetachInstancesFromLoadBalancerRequest(
            instanceNames: instanceNames, 
            loadBalancerName: loadBalancerName
        )
        return try await self.detachInstancesFromLoadBalancer(input, logger: logger)
    }

    /// Detaches a static IP from the Amazon Lightsail instance to which it is attached.
    @Sendable
    @inlinable
    public func detachStaticIp(_ input: DetachStaticIpRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetachStaticIpResult {
        try await self.client.execute(
            operation: "DetachStaticIp", 
            path: "/ls/api/2016-11-28/DetachStaticIp", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detaches a static IP from the Amazon Lightsail instance to which it is attached.
    ///
    /// Parameters:
    ///   - staticIpName: The name of the static IP to detach from the instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func detachStaticIp(
        staticIpName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetachStaticIpResult {
        let input = DetachStaticIpRequest(
            staticIpName: staticIpName
        )
        return try await self.detachStaticIp(input, logger: logger)
    }

    /// Disables an add-on for an Amazon Lightsail resource. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func disableAddOn(_ input: DisableAddOnRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DisableAddOnResult {
        try await self.client.execute(
            operation: "DisableAddOn", 
            path: "/ls/api/2016-11-28/DisableAddOn", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Disables an add-on for an Amazon Lightsail resource. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - addOnType: The add-on type to disable.
    ///   - resourceName: The name of the source resource for which to disable the add-on.
    ///   - logger: Logger use during operation
    @inlinable
    public func disableAddOn(
        addOnType: AddOnType,
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DisableAddOnResult {
        let input = DisableAddOnRequest(
            addOnType: addOnType, 
            resourceName: resourceName
        )
        return try await self.disableAddOn(input, logger: logger)
    }

    /// Downloads the regional Amazon Lightsail default key pair. This action also creates a Lightsail default key pair if a default key pair does not currently exist in the Amazon Web Services Region.
    @Sendable
    @inlinable
    public func downloadDefaultKeyPair(_ input: DownloadDefaultKeyPairRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DownloadDefaultKeyPairResult {
        try await self.client.execute(
            operation: "DownloadDefaultKeyPair", 
            path: "/ls/api/2016-11-28/DownloadDefaultKeyPair", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Downloads the regional Amazon Lightsail default key pair. This action also creates a Lightsail default key pair if a default key pair does not currently exist in the Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func downloadDefaultKeyPair(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DownloadDefaultKeyPairResult {
        let input = DownloadDefaultKeyPairRequest(
        )
        return try await self.downloadDefaultKeyPair(input, logger: logger)
    }

    /// Enables or modifies an add-on for an Amazon Lightsail resource. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func enableAddOn(_ input: EnableAddOnRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> EnableAddOnResult {
        try await self.client.execute(
            operation: "EnableAddOn", 
            path: "/ls/api/2016-11-28/EnableAddOn", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Enables or modifies an add-on for an Amazon Lightsail resource. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - addOnRequest: An array of strings representing the add-on to enable or modify.
    ///   - resourceName: The name of the source resource for which to enable or modify the add-on.
    ///   - logger: Logger use during operation
    @inlinable
    public func enableAddOn(
        addOnRequest: AddOnRequest,
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> EnableAddOnResult {
        let input = EnableAddOnRequest(
            addOnRequest: addOnRequest, 
            resourceName: resourceName
        )
        return try await self.enableAddOn(input, logger: logger)
    }

    /// Exports an Amazon Lightsail instance or block storage disk snapshot to Amazon Elastic Compute Cloud (Amazon EC2). This operation results in an export snapshot record that can be used with the create cloud formation stack operation to create new Amazon EC2 instances. Exported instance snapshots appear in Amazon EC2 as Amazon Machine Images (AMIs), and the instance system disk appears as an Amazon Elastic Block Store (Amazon EBS) volume. Exported disk snapshots appear in Amazon EC2 as Amazon EBS volumes. Snapshots are exported to the same Amazon Web Services Region in Amazon EC2 as the source Lightsail snapshot.  The export snapshot operation supports tag-based access control via resource tags applied to the resource identified by source snapshot name. For more information, see the Amazon Lightsail Developer Guide.  Use the get instance snapshots or get disk snapshots operations to get a list of snapshots that you can export to Amazon EC2.
    @Sendable
    @inlinable
    public func exportSnapshot(_ input: ExportSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ExportSnapshotResult {
        try await self.client.execute(
            operation: "ExportSnapshot", 
            path: "/ls/api/2016-11-28/ExportSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Exports an Amazon Lightsail instance or block storage disk snapshot to Amazon Elastic Compute Cloud (Amazon EC2). This operation results in an export snapshot record that can be used with the create cloud formation stack operation to create new Amazon EC2 instances. Exported instance snapshots appear in Amazon EC2 as Amazon Machine Images (AMIs), and the instance system disk appears as an Amazon Elastic Block Store (Amazon EBS) volume. Exported disk snapshots appear in Amazon EC2 as Amazon EBS volumes. Snapshots are exported to the same Amazon Web Services Region in Amazon EC2 as the source Lightsail snapshot.  The export snapshot operation supports tag-based access control via resource tags applied to the resource identified by source snapshot name. For more information, see the Amazon Lightsail Developer Guide.  Use the get instance snapshots or get disk snapshots operations to get a list of snapshots that you can export to Amazon EC2.
    ///
    /// Parameters:
    ///   - sourceSnapshotName: The name of the instance or disk snapshot to be exported to Amazon EC2.
    ///   - logger: Logger use during operation
    @inlinable
    public func exportSnapshot(
        sourceSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ExportSnapshotResult {
        let input = ExportSnapshotRequest(
            sourceSnapshotName: sourceSnapshotName
        )
        return try await self.exportSnapshot(input, logger: logger)
    }

    /// Returns the names of all active (not deleted) resources.
    @Sendable
    @inlinable
    public func getActiveNames(_ input: GetActiveNamesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetActiveNamesResult {
        try await self.client.execute(
            operation: "GetActiveNames", 
            path: "/ls/api/2016-11-28/GetActiveNames", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the names of all active (not deleted) resources.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetActiveNames request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getActiveNames(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetActiveNamesResult {
        let input = GetActiveNamesRequest(
            pageToken: pageToken
        )
        return try await self.getActiveNames(input, logger: logger)
    }

    /// Returns information about the configured alarms. Specify an alarm name in your request to return information about a specific alarm, or specify a monitored resource name to return information about all alarms for a specific resource. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getAlarms(_ input: GetAlarmsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAlarmsResult {
        try await self.client.execute(
            operation: "GetAlarms", 
            path: "/ls/api/2016-11-28/GetAlarms", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the configured alarms. Specify an alarm name in your request to return information about a specific alarm, or specify a monitored resource name to return information about all alarms for a specific resource. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - alarmName: The name of the alarm. Specify an alarm name to return information about a specific alarm.
    ///   - monitoredResourceName: The name of the Lightsail resource being monitored by the alarm. Specify a monitored resource name to return information about all alarms for a specific resource.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetAlarms request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAlarms(
        alarmName: String? = nil,
        monitoredResourceName: String? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAlarmsResult {
        let input = GetAlarmsRequest(
            alarmName: alarmName, 
            monitoredResourceName: monitoredResourceName, 
            pageToken: pageToken
        )
        return try await self.getAlarms(input, logger: logger)
    }

    /// Returns the available automatic snapshots for an instance or disk. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func getAutoSnapshots(_ input: GetAutoSnapshotsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetAutoSnapshotsResult {
        try await self.client.execute(
            operation: "GetAutoSnapshots", 
            path: "/ls/api/2016-11-28/GetAutoSnapshots", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the available automatic snapshots for an instance or disk. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - resourceName: The name of the source instance or disk from which to get automatic snapshot information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getAutoSnapshots(
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetAutoSnapshotsResult {
        let input = GetAutoSnapshotsRequest(
            resourceName: resourceName
        )
        return try await self.getAutoSnapshots(input, logger: logger)
    }

    /// Returns the list of available instance images, or blueprints. You can use a blueprint to create a new instance already running a specific operating system, as well as a preinstalled app or development stack. The software each instance is running depends on the blueprint image you choose.  Use active blueprints when creating new instances. Inactive blueprints are listed to support customers with existing instances and are not necessarily available to create new instances. Blueprints are marked inactive when they become outdated due to operating system updates or new application releases.
    @Sendable
    @inlinable
    public func getBlueprints(_ input: GetBlueprintsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBlueprintsResult {
        try await self.client.execute(
            operation: "GetBlueprints", 
            path: "/ls/api/2016-11-28/GetBlueprints", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of available instance images, or blueprints. You can use a blueprint to create a new instance already running a specific operating system, as well as a preinstalled app or development stack. The software each instance is running depends on the blueprint image you choose.  Use active blueprints when creating new instances. Inactive blueprints are listed to support customers with existing instances and are not necessarily available to create new instances. Blueprints are marked inactive when they become outdated due to operating system updates or new application releases.
    ///
    /// Parameters:
    ///   - appCategory: Returns a list of blueprints that are specific to Lightsail for Research.  You must use this parameter to view Lightsail for Research blueprints.
    ///   - includeInactive: A Boolean value that indicates whether to include inactive (unavailable) blueprints in the response of your request.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetBlueprints request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBlueprints(
        appCategory: AppCategory? = nil,
        includeInactive: Bool? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBlueprintsResult {
        let input = GetBlueprintsRequest(
            appCategory: appCategory, 
            includeInactive: includeInactive, 
            pageToken: pageToken
        )
        return try await self.getBlueprints(input, logger: logger)
    }

    /// Returns the existing access key IDs for the specified Amazon Lightsail bucket.  This action does not return the secret access key value of an access key. You can get a secret access key only when you create it from the response of the CreateBucketAccessKey action. If you lose the secret access key, you must create a new access key.
    @Sendable
    @inlinable
    public func getBucketAccessKeys(_ input: GetBucketAccessKeysRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBucketAccessKeysResult {
        try await self.client.execute(
            operation: "GetBucketAccessKeys", 
            path: "/ls/api/2016-11-28/GetBucketAccessKeys", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the existing access key IDs for the specified Amazon Lightsail bucket.  This action does not return the secret access key value of an access key. You can get a secret access key only when you create it from the response of the CreateBucketAccessKey action. If you lose the secret access key, you must create a new access key.
    ///
    /// Parameters:
    ///   - bucketName: The name of the bucket for which to return access keys.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBucketAccessKeys(
        bucketName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBucketAccessKeysResult {
        let input = GetBucketAccessKeysRequest(
            bucketName: bucketName
        )
        return try await self.getBucketAccessKeys(input, logger: logger)
    }

    /// Returns the bundles that you can apply to a Amazon Lightsail bucket. The bucket bundle specifies the monthly cost, storage quota, and data transfer quota for a bucket. Use the UpdateBucketBundle action to update the bundle for a bucket.
    @Sendable
    @inlinable
    public func getBucketBundles(_ input: GetBucketBundlesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBucketBundlesResult {
        try await self.client.execute(
            operation: "GetBucketBundles", 
            path: "/ls/api/2016-11-28/GetBucketBundles", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the bundles that you can apply to a Amazon Lightsail bucket. The bucket bundle specifies the monthly cost, storage quota, and data transfer quota for a bucket. Use the UpdateBucketBundle action to update the bundle for a bucket.
    ///
    /// Parameters:
    ///   - includeInactive: A Boolean value that indicates whether to include inactive (unavailable) bundles in the response of your request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBucketBundles(
        includeInactive: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBucketBundlesResult {
        let input = GetBucketBundlesRequest(
            includeInactive: includeInactive
        )
        return try await self.getBucketBundles(input, logger: logger)
    }

    /// Returns the data points of a specific metric for an Amazon Lightsail bucket. Metrics report the utilization of a bucket. View and collect metric data regularly to monitor the number of objects stored in a bucket (including object versions) and the storage space used by those objects.
    @Sendable
    @inlinable
    public func getBucketMetricData(_ input: GetBucketMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBucketMetricDataResult {
        try await self.client.execute(
            operation: "GetBucketMetricData", 
            path: "/ls/api/2016-11-28/GetBucketMetricData", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the data points of a specific metric for an Amazon Lightsail bucket. Metrics report the utilization of a bucket. View and collect metric data regularly to monitor the number of objects stored in a bucket (including object versions) and the storage space used by those objects.
    ///
    /// Parameters:
    ///   - bucketName: The name of the bucket for which to get metric data.
    ///   - endTime: The timestamp indicating the latest data to be returned.
    ///   - metricName: The metric for which you want to return information. Valid bucket metric names are listed below, along with the most useful statistics to include in your request, and the published unit value.  These bucket metrics are reported once per day.      BucketSizeBytes - The amount of data in bytes stored in a bucket. This value is calculated by summing the size of all objects in the bucket (including object versions), including the size of all parts for all incomplete multipart uploads to the bucket. Statistics: The most useful statistic is Maximum. Unit: The published unit is Bytes.     NumberOfObjects - The total number of objects stored in a bucket. This value is calculated by counting all objects in the bucket (including object versions) and the total number of parts for all incomplete multipart uploads to the bucket. Statistics: The most useful statistic is Average. Unit: The published unit is Count.
    ///   - period: The granularity, in seconds, of the returned data points.  Bucket storage metrics are reported once per day. Therefore, you should specify a period of 86400 seconds, which is the number of seconds in a day.
    ///   - startTime: The timestamp indicating the earliest data to be returned.
    ///   - statistics: The statistic for the metric. The following statistics are available:    Minimum - The lowest value observed during the specified period. Use this value to determine low volumes of activity for your application.    Maximum - The highest value observed during the specified period. Use this value to determine high volumes of activity for your application.    Sum - The sum of all values submitted for the matching metric. You can use this statistic to determine the total volume of a metric.    Average - The value of Sum / SampleCount during the specified period. By comparing this statistic with the Minimum and Maximum values, you can determine the full scope of a metric and how close the average use is to the Minimum and Maximum values. This comparison helps you to know when to increase or decrease your resources.    SampleCount - The count, or number, of data points used for the statistical calculation.
    ///   - unit: The unit for the metric data request. Valid units depend on the metric data being requested. For the valid units with each available metric, see the metricName parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBucketMetricData(
        bucketName: String,
        endTime: Date,
        metricName: BucketMetricName,
        period: Int,
        startTime: Date,
        statistics: [MetricStatistic],
        unit: MetricUnit,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBucketMetricDataResult {
        let input = GetBucketMetricDataRequest(
            bucketName: bucketName, 
            endTime: endTime, 
            metricName: metricName, 
            period: period, 
            startTime: startTime, 
            statistics: statistics, 
            unit: unit
        )
        return try await self.getBucketMetricData(input, logger: logger)
    }

    /// Returns information about one or more Amazon Lightsail buckets. The information returned includes the synchronization status of the Amazon Simple Storage Service (Amazon S3) account-level block public access feature for your Lightsail buckets. For more information about buckets, see Buckets in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func getBuckets(_ input: GetBucketsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBucketsResult {
        try await self.client.execute(
            operation: "GetBuckets", 
            path: "/ls/api/2016-11-28/GetBuckets", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about one or more Amazon Lightsail buckets. The information returned includes the synchronization status of the Amazon Simple Storage Service (Amazon S3) account-level block public access feature for your Lightsail buckets. For more information about buckets, see Buckets in Amazon Lightsail in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - bucketName: The name of the bucket for which to return information. When omitted, the response includes all of your buckets in the Amazon Web Services Region where the request is made.
    ///   - includeConnectedResources: A Boolean value that indicates whether to include Lightsail instances that were given access to the bucket using the SetResourceAccessForBucket action.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetBuckets request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBuckets(
        bucketName: String? = nil,
        includeConnectedResources: Bool? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBucketsResult {
        let input = GetBucketsRequest(
            bucketName: bucketName, 
            includeConnectedResources: includeConnectedResources, 
            pageToken: pageToken
        )
        return try await self.getBuckets(input, logger: logger)
    }

    /// Returns the bundles that you can apply to an Amazon Lightsail instance when you create it. A bundle describes the specifications of an instance, such as the monthly cost, amount of memory, the number of vCPUs, amount of storage space, and monthly network data transfer quota.  Bundles are referred to as instance plans in the Lightsail console.
    @Sendable
    @inlinable
    public func getBundles(_ input: GetBundlesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetBundlesResult {
        try await self.client.execute(
            operation: "GetBundles", 
            path: "/ls/api/2016-11-28/GetBundles", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the bundles that you can apply to an Amazon Lightsail instance when you create it. A bundle describes the specifications of an instance, such as the monthly cost, amount of memory, the number of vCPUs, amount of storage space, and monthly network data transfer quota.  Bundles are referred to as instance plans in the Lightsail console.
    ///
    /// Parameters:
    ///   - appCategory: Returns a list of bundles that are specific to Lightsail for Research.  You must use this parameter to view Lightsail for Research bundles.
    ///   - includeInactive: A Boolean value that indicates whether to include inactive (unavailable) bundles in the response of your request.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetBundles request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getBundles(
        appCategory: AppCategory? = nil,
        includeInactive: Bool? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetBundlesResult {
        let input = GetBundlesRequest(
            appCategory: appCategory, 
            includeInactive: includeInactive, 
            pageToken: pageToken
        )
        return try await self.getBundles(input, logger: logger)
    }

    /// Returns information about one or more Amazon Lightsail SSL/TLS certificates.  To get a summary of a certificate, omit includeCertificateDetails from your request. The response will include only the certificate Amazon Resource Name (ARN), certificate name, domain name, and tags.
    @Sendable
    @inlinable
    public func getCertificates(_ input: GetCertificatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCertificatesResult {
        try await self.client.execute(
            operation: "GetCertificates", 
            path: "/ls/api/2016-11-28/GetCertificates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about one or more Amazon Lightsail SSL/TLS certificates.  To get a summary of a certificate, omit includeCertificateDetails from your request. The response will include only the certificate Amazon Resource Name (ARN), certificate name, domain name, and tags.
    ///
    /// Parameters:
    ///   - certificateName: The name for the certificate for which to return information. When omitted, the response includes all of your certificates in the Amazon Web Services Region where the request is made.
    ///   - certificateStatuses: The status of the certificates for which to return information. For example, specify ISSUED to return only certificates with an ISSUED status. When omitted, the response includes all of your certificates in the Amazon Web Services Region where the request is made, regardless of their current status.
    ///   - includeCertificateDetails: Indicates whether to include detailed information about the certificates in the response. When omitted, the response includes only the certificate names, Amazon Resource Names (ARNs), domain names, and tags.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetCertificates request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCertificates(
        certificateName: String? = nil,
        certificateStatuses: [CertificateStatus]? = nil,
        includeCertificateDetails: Bool? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCertificatesResult {
        let input = GetCertificatesRequest(
            certificateName: certificateName, 
            certificateStatuses: certificateStatuses, 
            includeCertificateDetails: includeCertificateDetails, 
            pageToken: pageToken
        )
        return try await self.getCertificates(input, logger: logger)
    }

    /// Returns the CloudFormation stack record created as a result of the create cloud formation stack operation. An AWS CloudFormation stack is used to create a new Amazon EC2 instance from an exported Lightsail snapshot.
    @Sendable
    @inlinable
    public func getCloudFormationStackRecords(_ input: GetCloudFormationStackRecordsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCloudFormationStackRecordsResult {
        try await self.client.execute(
            operation: "GetCloudFormationStackRecords", 
            path: "/ls/api/2016-11-28/GetCloudFormationStackRecords", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the CloudFormation stack record created as a result of the create cloud formation stack operation. An AWS CloudFormation stack is used to create a new Amazon EC2 instance from an exported Lightsail snapshot.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetClouFormationStackRecords request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCloudFormationStackRecords(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCloudFormationStackRecordsResult {
        let input = GetCloudFormationStackRecordsRequest(
            pageToken: pageToken
        )
        return try await self.getCloudFormationStackRecords(input, logger: logger)
    }

    /// Returns information about the configured contact methods. Specify a protocol in your request to return information about a specific contact method. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getContactMethods(_ input: GetContactMethodsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContactMethodsResult {
        try await self.client.execute(
            operation: "GetContactMethods", 
            path: "/ls/api/2016-11-28/GetContactMethods", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the configured contact methods. Specify a protocol in your request to return information about a specific contact method. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - protocols: The protocols used to send notifications, such as Email, or SMS (text messaging). Specify a protocol in your request to return information about a specific contact method protocol.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContactMethods(
        protocols: [ContactProtocol]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContactMethodsResult {
        let input = GetContactMethodsRequest(
            protocols: protocols
        )
        return try await self.getContactMethods(input, logger: logger)
    }

    /// Returns information about Amazon Lightsail containers, such as the current version of the Lightsail Control (lightsailctl) plugin.
    @Sendable
    @inlinable
    public func getContainerAPIMetadata(_ input: GetContainerAPIMetadataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContainerAPIMetadataResult {
        try await self.client.execute(
            operation: "GetContainerAPIMetadata", 
            path: "/ls/api/2016-11-28/container-api-metadata", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about Amazon Lightsail containers, such as the current version of the Lightsail Control (lightsailctl) plugin.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerAPIMetadata(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContainerAPIMetadataResult {
        let input = GetContainerAPIMetadataRequest(
        )
        return try await self.getContainerAPIMetadata(input, logger: logger)
    }

    /// Returns the container images that are registered to your Amazon Lightsail container service.  If you created a deployment on your Lightsail container service that uses container images from a public registry like Docker Hub, those images are not returned as part of this action. Those images are not registered to your Lightsail container service.
    @Sendable
    @inlinable
    public func getContainerImages(_ input: GetContainerImagesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContainerImagesResult {
        try await self.client.execute(
            operation: "GetContainerImages", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/images", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the container images that are registered to your Amazon Lightsail container service.  If you created a deployment on your Lightsail container service that uses container images from a public registry like Docker Hub, those images are not returned as part of this action. Those images are not registered to your Lightsail container service.
    ///
    /// Parameters:
    ///   - serviceName: The name of the container service for which to return registered container images.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerImages(
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContainerImagesResult {
        let input = GetContainerImagesRequest(
            serviceName: serviceName
        )
        return try await self.getContainerImages(input, logger: logger)
    }

    /// Returns the log events of a container of your Amazon Lightsail container service. If your container service has more than one node (i.e., a scale greater than 1), then the log events that are returned for the specified container are merged from all nodes on your container service.  Container logs are retained for a certain amount of time. For more information, see Amazon Lightsail endpoints and quotas in the Amazon Web Services General Reference.
    @Sendable
    @inlinable
    public func getContainerLog(_ input: GetContainerLogRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContainerLogResult {
        try await self.client.execute(
            operation: "GetContainerLog", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/containers/{containerName}/log", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the log events of a container of your Amazon Lightsail container service. If your container service has more than one node (i.e., a scale greater than 1), then the log events that are returned for the specified container are merged from all nodes on your container service.  Container logs are retained for a certain amount of time. For more information, see Amazon Lightsail endpoints and quotas in the Amazon Web Services General Reference.
    ///
    /// Parameters:
    ///   - containerName: The name of the container that is either running or previously ran on the container service for which to return a log.
    ///   - endTime: The end of the time interval for which to get log data. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use an end time of October 1, 2018, at 9 PM UTC, specify 1538427600 as the end time.   You can convert a human-friendly time to Unix time format using a converter like Epoch converter.
    ///   - filterPattern: The pattern to use to filter the returned log events to a specific term. The following are a few examples of filter patterns that you can specify:   To return all log events, specify a filter pattern of "".   To exclude log events that contain the ERROR term, and return all other log events, specify a filter pattern of "-ERROR".   To return log events that contain the ERROR term, specify a filter pattern of "ERROR".   To return log events that contain both the ERROR and Exception terms, specify a filter pattern of "ERROR Exception".   To return log events that contain the ERROR or the Exception term, specify a filter pattern of "?ERROR ?Exception".
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetContainerLog request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - serviceName: The name of the container service for which to get a container log.
    ///   - startTime: The start of the time interval for which to get log data. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use a start time of October 1, 2018, at 8 PM UTC, specify 1538424000 as the start time.   You can convert a human-friendly time to Unix time format using a converter like Epoch converter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerLog(
        containerName: String,
        endTime: Date? = nil,
        filterPattern: String? = nil,
        pageToken: String? = nil,
        serviceName: String,
        startTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContainerLogResult {
        let input = GetContainerLogRequest(
            containerName: containerName, 
            endTime: endTime, 
            filterPattern: filterPattern, 
            pageToken: pageToken, 
            serviceName: serviceName, 
            startTime: startTime
        )
        return try await self.getContainerLog(input, logger: logger)
    }

    /// Returns the deployments for your Amazon Lightsail container service A deployment specifies the settings, such as the ports and launch command, of containers that are deployed to your container service. The deployments are ordered by version in ascending order. The newest version is listed at the top of the response.  A set number of deployments are kept before the oldest one is replaced with the newest one. For more information, see Amazon Lightsail endpoints and quotas in the Amazon Web Services General Reference.
    @Sendable
    @inlinable
    public func getContainerServiceDeployments(_ input: GetContainerServiceDeploymentsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContainerServiceDeploymentsResult {
        try await self.client.execute(
            operation: "GetContainerServiceDeployments", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/deployments", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the deployments for your Amazon Lightsail container service A deployment specifies the settings, such as the ports and launch command, of containers that are deployed to your container service. The deployments are ordered by version in ascending order. The newest version is listed at the top of the response.  A set number of deployments are kept before the oldest one is replaced with the newest one. For more information, see Amazon Lightsail endpoints and quotas in the Amazon Web Services General Reference.
    ///
    /// Parameters:
    ///   - serviceName: The name of the container service for which to return deployments.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerServiceDeployments(
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContainerServiceDeploymentsResult {
        let input = GetContainerServiceDeploymentsRequest(
            serviceName: serviceName
        )
        return try await self.getContainerServiceDeployments(input, logger: logger)
    }

    /// Returns the data points of a specific metric of your Amazon Lightsail container service. Metrics report the utilization of your resources. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    @Sendable
    @inlinable
    public func getContainerServiceMetricData(_ input: GetContainerServiceMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContainerServiceMetricDataResult {
        try await self.client.execute(
            operation: "GetContainerServiceMetricData", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/metrics", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the data points of a specific metric of your Amazon Lightsail container service. Metrics report the utilization of your resources. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    ///
    /// Parameters:
    ///   - endTime: The end time of the time period.
    ///   - metricName: The metric for which you want to return information. Valid container service metric names are listed below, along with the most useful statistics to include in your request, and the published unit value.    CPUUtilization - The average percentage of compute units that are currently in use across all nodes of the container service. This metric identifies the processing power required to run containers on each node of the container service. Statistics: The most useful statistics are Maximum and Average. Unit: The published unit is Percent.    MemoryUtilization - The average percentage of available memory that is currently in use across all nodes of the container service. This metric identifies the memory required to run containers on each node of the container service. Statistics: The most useful statistics are Maximum and Average. Unit: The published unit is Percent.
    ///   - period: The granularity, in seconds, of the returned data points. All container service metric data is available in 5-minute (300 seconds) granularity.
    ///   - serviceName: The name of the container service for which to get metric data.
    ///   - startTime: The start time of the time period.
    ///   - statistics: The statistic for the metric. The following statistics are available:    Minimum - The lowest value observed during the specified period. Use this value to determine low volumes of activity for your application.    Maximum - The highest value observed during the specified period. Use this value to determine high volumes of activity for your application.    Sum - All values submitted for the matching metric added together. You can use this statistic to determine the total volume of a metric.    Average - The value of Sum / SampleCount during the specified period. By comparing this statistic with the Minimum and Maximum values, you can determine the full scope of a metric and how close the average use is to the Minimum and Maximum values. This comparison helps you to know when to increase or decrease your resources.    SampleCount - The count, or number, of data points used for the statistical calculation.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerServiceMetricData(
        endTime: Date,
        metricName: ContainerServiceMetricName,
        period: Int,
        serviceName: String,
        startTime: Date,
        statistics: [MetricStatistic],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContainerServiceMetricDataResult {
        let input = GetContainerServiceMetricDataRequest(
            endTime: endTime, 
            metricName: metricName, 
            period: period, 
            serviceName: serviceName, 
            startTime: startTime, 
            statistics: statistics
        )
        return try await self.getContainerServiceMetricData(input, logger: logger)
    }

    /// Returns the list of powers that can be specified for your Amazon Lightsail container services. The power specifies the amount of memory, the number of vCPUs, and the base price of the container service.
    @Sendable
    @inlinable
    public func getContainerServicePowers(_ input: GetContainerServicePowersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetContainerServicePowersResult {
        try await self.client.execute(
            operation: "GetContainerServicePowers", 
            path: "/ls/api/2016-11-28/container-service-powers", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of powers that can be specified for your Amazon Lightsail container services. The power specifies the amount of memory, the number of vCPUs, and the base price of the container service.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerServicePowers(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetContainerServicePowersResult {
        let input = GetContainerServicePowersRequest(
        )
        return try await self.getContainerServicePowers(input, logger: logger)
    }

    /// Returns information about one or more of your Amazon Lightsail container services.
    @Sendable
    @inlinable
    public func getContainerServices(_ input: GetContainerServicesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ContainerServicesListResult {
        try await self.client.execute(
            operation: "GetContainerServices", 
            path: "/ls/api/2016-11-28/container-services", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about one or more of your Amazon Lightsail container services.
    ///
    /// Parameters:
    ///   - serviceName: The name of the container service for which to return information. When omitted, the response includes all of your container services in the Amazon Web Services Region where the request is made.
    ///   - logger: Logger use during operation
    @inlinable
    public func getContainerServices(
        serviceName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ContainerServicesListResult {
        let input = GetContainerServicesRequest(
            serviceName: serviceName
        )
        return try await self.getContainerServices(input, logger: logger)
    }

    /// Retrieves information about the cost estimate for a specified resource. A cost estimate will not generate for a resource that has been deleted.
    @Sendable
    @inlinable
    public func getCostEstimate(_ input: GetCostEstimateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetCostEstimateResult {
        try await self.client.execute(
            operation: "GetCostEstimate", 
            path: "/budgettracker/getCostEstimate", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieves information about the cost estimate for a specified resource. A cost estimate will not generate for a resource that has been deleted.
    ///
    /// Parameters:
    ///   - endTime: The cost estimate end time. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you want to use an end time of October 1, 2018, at 9 PM UTC, specify 1538427600 as the end time.   You can convert a human-friendly time to Unix time format using a converter like Epoch converter.
    ///   - resourceName: The resource name.
    ///   - startTime: The cost estimate start time. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you want to use a start time of October 1, 2018, at 8 PM UTC, specify 1538424000 as the start time.   You can convert a human-friendly time to Unix time format using a converter like Epoch converter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getCostEstimate(
        endTime: Date,
        resourceName: String,
        startTime: Date,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetCostEstimateResult {
        let input = GetCostEstimateRequest(
            endTime: endTime, 
            resourceName: resourceName, 
            startTime: startTime
        )
        return try await self.getCostEstimate(input, logger: logger)
    }

    /// Returns information about a specific block storage disk.
    @Sendable
    @inlinable
    public func getDisk(_ input: GetDiskRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDiskResult {
        try await self.client.execute(
            operation: "GetDisk", 
            path: "/ls/api/2016-11-28/GetDisk", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific block storage disk.
    ///
    /// Parameters:
    ///   - diskName: The name of the disk (my-disk).
    ///   - logger: Logger use during operation
    @inlinable
    public func getDisk(
        diskName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDiskResult {
        let input = GetDiskRequest(
            diskName: diskName
        )
        return try await self.getDisk(input, logger: logger)
    }

    /// Returns information about a specific block storage disk snapshot.
    @Sendable
    @inlinable
    public func getDiskSnapshot(_ input: GetDiskSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDiskSnapshotResult {
        try await self.client.execute(
            operation: "GetDiskSnapshot", 
            path: "/ls/api/2016-11-28/GetDiskSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific block storage disk snapshot.
    ///
    /// Parameters:
    ///   - diskSnapshotName: The name of the disk snapshot (my-disk-snapshot).
    ///   - logger: Logger use during operation
    @inlinable
    public func getDiskSnapshot(
        diskSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDiskSnapshotResult {
        let input = GetDiskSnapshotRequest(
            diskSnapshotName: diskSnapshotName
        )
        return try await self.getDiskSnapshot(input, logger: logger)
    }

    /// Returns information about all block storage disk snapshots in your AWS account and region.
    @Sendable
    @inlinable
    public func getDiskSnapshots(_ input: GetDiskSnapshotsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDiskSnapshotsResult {
        try await self.client.execute(
            operation: "GetDiskSnapshots", 
            path: "/ls/api/2016-11-28/GetDiskSnapshots", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all block storage disk snapshots in your AWS account and region.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetDiskSnapshots request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDiskSnapshots(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDiskSnapshotsResult {
        let input = GetDiskSnapshotsRequest(
            pageToken: pageToken
        )
        return try await self.getDiskSnapshots(input, logger: logger)
    }

    /// Returns information about all block storage disks in your AWS account and region.
    @Sendable
    @inlinable
    public func getDisks(_ input: GetDisksRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDisksResult {
        try await self.client.execute(
            operation: "GetDisks", 
            path: "/ls/api/2016-11-28/GetDisks", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all block storage disks in your AWS account and region.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetDisks request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDisks(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDisksResult {
        let input = GetDisksRequest(
            pageToken: pageToken
        )
        return try await self.getDisks(input, logger: logger)
    }

    /// Returns the bundles that can be applied to your Amazon Lightsail content delivery network (CDN) distributions. A distribution bundle specifies the monthly network transfer quota and monthly cost of your distribution.
    @Sendable
    @inlinable
    public func getDistributionBundles(_ input: GetDistributionBundlesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDistributionBundlesResult {
        try await self.client.execute(
            operation: "GetDistributionBundles", 
            path: "/ls/api/2016-11-28/GetDistributionBundles", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the bundles that can be applied to your Amazon Lightsail content delivery network (CDN) distributions. A distribution bundle specifies the monthly network transfer quota and monthly cost of your distribution.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func getDistributionBundles(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDistributionBundlesResult {
        let input = GetDistributionBundlesRequest(
        )
        return try await self.getDistributionBundles(input, logger: logger)
    }

    /// Returns the timestamp and status of the last cache reset of a specific Amazon Lightsail content delivery network (CDN) distribution.
    @Sendable
    @inlinable
    public func getDistributionLatestCacheReset(_ input: GetDistributionLatestCacheResetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDistributionLatestCacheResetResult {
        try await self.client.execute(
            operation: "GetDistributionLatestCacheReset", 
            path: "/ls/api/2016-11-28/GetDistributionLatestCacheReset", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the timestamp and status of the last cache reset of a specific Amazon Lightsail content delivery network (CDN) distribution.
    ///
    /// Parameters:
    ///   - distributionName: The name of the distribution for which to return the timestamp of the last cache reset. Use the GetDistributions action to get a list of distribution names that you can specify. When omitted, the response includes the latest cache reset timestamp of all your distributions.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDistributionLatestCacheReset(
        distributionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDistributionLatestCacheResetResult {
        let input = GetDistributionLatestCacheResetRequest(
            distributionName: distributionName
        )
        return try await self.getDistributionLatestCacheReset(input, logger: logger)
    }

    /// Returns the data points of a specific metric for an Amazon Lightsail content delivery network (CDN) distribution. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    @Sendable
    @inlinable
    public func getDistributionMetricData(_ input: GetDistributionMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDistributionMetricDataResult {
        try await self.client.execute(
            operation: "GetDistributionMetricData", 
            path: "/ls/api/2016-11-28/GetDistributionMetricData", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the data points of a specific metric for an Amazon Lightsail content delivery network (CDN) distribution. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    ///
    /// Parameters:
    ///   - distributionName: The name of the distribution for which to get metric data. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - endTime: The end of the time interval for which to get metric data. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use an end time of October 1, 2018, at 9 PM UTC, specify 1538427600 as the end time.   You can convert a human-friendly time to Unix time format using a converter like Epoch converter.
    ///   - metricName: The metric for which you want to return information. Valid distribution metric names are listed below, along with the most useful statistics to include in your request, and the published unit value.     Requests - The total number of viewer requests received by your Lightsail distribution, for all HTTP methods, and for both HTTP and HTTPS requests.  Statistics: The most useful statistic is Sum.  Unit: The published unit is None.     BytesDownloaded - The number of bytes downloaded by viewers for GET, HEAD, and OPTIONS requests.  Statistics: The most useful statistic is Sum.  Unit: The published unit is None.     BytesUploaded  - The number of bytes uploaded to your origin by your Lightsail distribution, using POST and PUT requests.  Statistics: The most useful statistic is Sum.  Unit: The published unit is None.     TotalErrorRate - The percentage of all viewer requests for which the response's HTTP status code was 4xx or 5xx.  Statistics: The most useful statistic is Average.  Unit: The published unit is Percent.     4xxErrorRate - The percentage of all viewer requests for which the response's HTTP status cod was 4xx. In these cases, the client or client viewer may have made an error. For example, a status code of 404 (Not Found) means that the client requested an object that could not be found.  Statistics: The most useful statistic is Average.  Unit: The published unit is Percent.     5xxErrorRate - The percentage of all viewer requests for which the response's HTTP status code was 5xx. In these cases, the origin server did not satisfy the requests. For example, a status code of 503 (Service Unavailable) means that the origin server is currently unavailable.  Statistics: The most useful statistic is Average.  Unit: The published unit is Percent.
    ///   - period: The granularity, in seconds, for the metric data points that will be returned.
    ///   - startTime: The start of the time interval for which to get metric data. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use a start time of October 1, 2018, at 8 PM UTC, specify 1538424000 as the start time.   You can convert a human-friendly time to Unix time format using a converter like Epoch converter.
    ///   - statistics: The statistic for the metric. The following statistics are available:    Minimum - The lowest value observed during the specified period. Use this value to determine low volumes of activity for your application.    Maximum - The highest value observed during the specified period. Use this value to determine high volumes of activity for your application.    Sum - All values submitted for the matching metric added together. You can use this statistic to determine the total volume of a metric.    Average - The value of Sum / SampleCount during the specified period. By comparing this statistic with the Minimum and Maximum values, you can determine the full scope of a metric and how close the average use is to the Minimum and Maximum values. This comparison helps you to know when to increase or decrease your resources.    SampleCount - The count, or number, of data points used for the statistical calculation.
    ///   - unit: The unit for the metric data request. Valid units depend on the metric data being requested. For the valid units with each available metric, see the metricName parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDistributionMetricData(
        distributionName: String,
        endTime: Date,
        metricName: DistributionMetricName,
        period: Int,
        startTime: Date,
        statistics: [MetricStatistic],
        unit: MetricUnit,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDistributionMetricDataResult {
        let input = GetDistributionMetricDataRequest(
            distributionName: distributionName, 
            endTime: endTime, 
            metricName: metricName, 
            period: period, 
            startTime: startTime, 
            statistics: statistics, 
            unit: unit
        )
        return try await self.getDistributionMetricData(input, logger: logger)
    }

    /// Returns information about one or more of your Amazon Lightsail content delivery network (CDN) distributions.
    @Sendable
    @inlinable
    public func getDistributions(_ input: GetDistributionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDistributionsResult {
        try await self.client.execute(
            operation: "GetDistributions", 
            path: "/ls/api/2016-11-28/GetDistributions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about one or more of your Amazon Lightsail content delivery network (CDN) distributions.
    ///
    /// Parameters:
    ///   - distributionName: The name of the distribution for which to return information. When omitted, the response includes all of your distributions in the Amazon Web Services Region where the request is made.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetDistributions request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDistributions(
        distributionName: String? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDistributionsResult {
        let input = GetDistributionsRequest(
            distributionName: distributionName, 
            pageToken: pageToken
        )
        return try await self.getDistributions(input, logger: logger)
    }

    /// Returns information about a specific domain recordset.
    @Sendable
    @inlinable
    public func getDomain(_ input: GetDomainRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDomainResult {
        try await self.client.execute(
            operation: "GetDomain", 
            path: "/ls/api/2016-11-28/GetDomain", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific domain recordset.
    ///
    /// Parameters:
    ///   - domainName: The domain name for which your want to return information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomain(
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDomainResult {
        let input = GetDomainRequest(
            domainName: domainName
        )
        return try await self.getDomain(input, logger: logger)
    }

    /// Returns a list of all domains in the user's account.
    @Sendable
    @inlinable
    public func getDomains(_ input: GetDomainsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetDomainsResult {
        try await self.client.execute(
            operation: "GetDomains", 
            path: "/ls/api/2016-11-28/GetDomains", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of all domains in the user's account.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetDomains request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getDomains(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetDomainsResult {
        let input = GetDomainsRequest(
            pageToken: pageToken
        )
        return try await self.getDomains(input, logger: logger)
    }

    /// Returns all export snapshot records created as a result of the export snapshot operation. An export snapshot record can be used to create a new Amazon EC2 instance and its related resources with the CreateCloudFormationStack action.
    @Sendable
    @inlinable
    public func getExportSnapshotRecords(_ input: GetExportSnapshotRecordsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetExportSnapshotRecordsResult {
        try await self.client.execute(
            operation: "GetExportSnapshotRecords", 
            path: "/ls/api/2016-11-28/GetExportSnapshotRecords", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all export snapshot records created as a result of the export snapshot operation. An export snapshot record can be used to create a new Amazon EC2 instance and its related resources with the CreateCloudFormationStack action.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetExportSnapshotRecords request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getExportSnapshotRecords(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetExportSnapshotRecordsResult {
        let input = GetExportSnapshotRecordsRequest(
            pageToken: pageToken
        )
        return try await self.getExportSnapshotRecords(input, logger: logger)
    }

    /// Returns information about a specific Amazon Lightsail instance, which is a virtual private server.
    @Sendable
    @inlinable
    public func getInstance(_ input: GetInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstanceResult {
        try await self.client.execute(
            operation: "GetInstance", 
            path: "/ls/api/2016-11-28/GetInstance", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific Amazon Lightsail instance, which is a virtual private server.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstance(
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstanceResult {
        let input = GetInstanceRequest(
            instanceName: instanceName
        )
        return try await self.getInstance(input, logger: logger)
    }

    /// Returns temporary SSH keys you can use to connect to a specific virtual private server, or instance. The get instance access details operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func getInstanceAccessDetails(_ input: GetInstanceAccessDetailsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstanceAccessDetailsResult {
        try await self.client.execute(
            operation: "GetInstanceAccessDetails", 
            path: "/ls/api/2016-11-28/GetInstanceAccessDetails", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns temporary SSH keys you can use to connect to a specific virtual private server, or instance. The get instance access details operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance to access.
    ///   - protocol: The protocol to use to connect to your instance. Defaults to ssh.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstanceAccessDetails(
        instanceName: String,
        protocol: InstanceAccessProtocol? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstanceAccessDetailsResult {
        let input = GetInstanceAccessDetailsRequest(
            instanceName: instanceName, 
            protocol: `protocol`
        )
        return try await self.getInstanceAccessDetails(input, logger: logger)
    }

    /// Returns the data points for the specified Amazon Lightsail instance metric, given an instance name. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    @Sendable
    @inlinable
    public func getInstanceMetricData(_ input: GetInstanceMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstanceMetricDataResult {
        try await self.client.execute(
            operation: "GetInstanceMetricData", 
            path: "/ls/api/2016-11-28/GetInstanceMetricData", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the data points for the specified Amazon Lightsail instance metric, given an instance name. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    ///
    /// Parameters:
    ///   - endTime: The end time of the time period.
    ///   - instanceName: The name of the instance for which you want to get metrics data.
    ///   - metricName: The metric for which you want to return information. Valid instance metric names are listed below, along with the most useful statistics to include in your request, and the published unit value.     BurstCapacityPercentage - The percentage of CPU performance available for your instance to burst above its baseline. Your instance continuously accrues and consumes burst capacity. Burst capacity stops accruing when your instance's BurstCapacityPercentage reaches 100%. For more information, see Viewing instance burst capacity in Amazon Lightsail.  Statistics: The most useful statistics are Maximum and Average.  Unit: The published unit is Percent.     BurstCapacityTime - The available amount of time for your instance to burst at 100% CPU utilization. Your instance continuously accrues and consumes burst capacity. Burst capacity time stops accruing when your instance's BurstCapacityPercentage metric reaches 100%. Burst capacity time is consumed at the full rate only when your instance operates at 100% CPU utilization. For example, if your instance operates at 50% CPU utilization in the burstable zone for a 5-minute period, then it consumes CPU burst capacity minutes at a 50% rate in that period. Your instance consumed 2 minutes and 30 seconds of CPU burst capacity minutes in the 5-minute period. For more information, see Viewing instance burst capacity in Amazon Lightsail.  Statistics: The most useful statistics are Maximum and Average.  Unit: The published unit is Seconds.     CPUUtilization - The percentage of allocated compute units that are currently in use on the instance. This metric identifies the processing power to run the applications on the instance. Tools in your operating system can show a lower percentage than Lightsail when the instance is not allocated a full processor core.  Statistics: The most useful statistics are Maximum and Average.  Unit: The published unit is Percent.     NetworkIn - The number of bytes received on all network interfaces by the instance. This metric identifies the volume of incoming network traffic to the instance. The number reported is the number of bytes received during the period. Because this metric is reported in 5-minute intervals, divide the reported number by 300 to find Bytes/second.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Bytes.     NetworkOut - The number of bytes sent out on all network interfaces by the instance. This metric identifies the volume of outgoing network traffic from the instance. The number reported is the number of bytes sent during the period. Because this metric is reported in 5-minute intervals, divide the reported number by 300 to find Bytes/second.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Bytes.     StatusCheckFailed - Reports whether the instance passed or failed both the instance status check and the system status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.     StatusCheckFailed_Instance - Reports whether the instance passed or failed the instance status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.     StatusCheckFailed_System - Reports whether the instance passed or failed the system status check. This metric can be either 0 (passed) or 1 (failed). This metric data is available in 1-minute (60 seconds) granularity.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.     MetadataNoToken - Reports the number of times that the instance metadata service was successfully accessed without a token. This metric determines if there are any processes accessing instance metadata by using Instance Metadata Service Version 1, which doesn't use a token. If all requests use token-backed sessions, such as Instance Metadata Service Version 2, then the value is 0.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.
    ///   - period: The granularity, in seconds, of the returned data points. The StatusCheckFailed, StatusCheckFailed_Instance, and StatusCheckFailed_System instance metric data is available in 1-minute (60 seconds) granularity. All other instance metric data is available in 5-minute (300 seconds) granularity.
    ///   - startTime: The start time of the time period.
    ///   - statistics: The statistic for the metric. The following statistics are available:    Minimum - The lowest value observed during the specified period. Use this value to determine low volumes of activity for your application.    Maximum - The highest value observed during the specified period. Use this value to determine high volumes of activity for your application.    Sum - All values submitted for the matching metric added together. You can use this statistic to determine the total volume of a metric.    Average - The value of Sum / SampleCount during the specified period. By comparing this statistic with the Minimum and Maximum values, you can determine the full scope of a metric and how close the average use is to the Minimum and Maximum values. This comparison helps you to know when to increase or decrease your resources.    SampleCount - The count, or number, of data points used for the statistical calculation.
    ///   - unit: The unit for the metric data request. Valid units depend on the metric data being requested. For the valid units to specify with each available metric, see the metricName parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstanceMetricData(
        endTime: Date,
        instanceName: String,
        metricName: InstanceMetricName,
        period: Int,
        startTime: Date,
        statistics: [MetricStatistic],
        unit: MetricUnit,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstanceMetricDataResult {
        let input = GetInstanceMetricDataRequest(
            endTime: endTime, 
            instanceName: instanceName, 
            metricName: metricName, 
            period: period, 
            startTime: startTime, 
            statistics: statistics, 
            unit: unit
        )
        return try await self.getInstanceMetricData(input, logger: logger)
    }

    /// Returns the firewall port states for a specific Amazon Lightsail instance, the IP addresses allowed to connect to the instance through the ports, and the protocol.
    @Sendable
    @inlinable
    public func getInstancePortStates(_ input: GetInstancePortStatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstancePortStatesResult {
        try await self.client.execute(
            operation: "GetInstancePortStates", 
            path: "/ls/api/2016-11-28/GetInstancePortStates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the firewall port states for a specific Amazon Lightsail instance, the IP addresses allowed to connect to the instance through the ports, and the protocol.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance for which to return firewall port states.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstancePortStates(
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstancePortStatesResult {
        let input = GetInstancePortStatesRequest(
            instanceName: instanceName
        )
        return try await self.getInstancePortStates(input, logger: logger)
    }

    /// Returns information about a specific instance snapshot.
    @Sendable
    @inlinable
    public func getInstanceSnapshot(_ input: GetInstanceSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstanceSnapshotResult {
        try await self.client.execute(
            operation: "GetInstanceSnapshot", 
            path: "/ls/api/2016-11-28/GetInstanceSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific instance snapshot.
    ///
    /// Parameters:
    ///   - instanceSnapshotName: The name of the snapshot for which you are requesting information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstanceSnapshot(
        instanceSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstanceSnapshotResult {
        let input = GetInstanceSnapshotRequest(
            instanceSnapshotName: instanceSnapshotName
        )
        return try await self.getInstanceSnapshot(input, logger: logger)
    }

    /// Returns all instance snapshots for the user's account.
    @Sendable
    @inlinable
    public func getInstanceSnapshots(_ input: GetInstanceSnapshotsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstanceSnapshotsResult {
        try await self.client.execute(
            operation: "GetInstanceSnapshots", 
            path: "/ls/api/2016-11-28/GetInstanceSnapshots", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all instance snapshots for the user's account.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetInstanceSnapshots request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstanceSnapshots(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstanceSnapshotsResult {
        let input = GetInstanceSnapshotsRequest(
            pageToken: pageToken
        )
        return try await self.getInstanceSnapshots(input, logger: logger)
    }

    /// Returns the state of a specific instance. Works on one instance at a time.
    @Sendable
    @inlinable
    public func getInstanceState(_ input: GetInstanceStateRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstanceStateResult {
        try await self.client.execute(
            operation: "GetInstanceState", 
            path: "/ls/api/2016-11-28/GetInstanceState", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the state of a specific instance. Works on one instance at a time.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance to get state information about.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstanceState(
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstanceStateResult {
        let input = GetInstanceStateRequest(
            instanceName: instanceName
        )
        return try await self.getInstanceState(input, logger: logger)
    }

    /// Returns information about all Amazon Lightsail virtual private servers, or instances.
    @Sendable
    @inlinable
    public func getInstances(_ input: GetInstancesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetInstancesResult {
        try await self.client.execute(
            operation: "GetInstances", 
            path: "/ls/api/2016-11-28/GetInstances", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all Amazon Lightsail virtual private servers, or instances.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetInstances request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getInstances(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetInstancesResult {
        let input = GetInstancesRequest(
            pageToken: pageToken
        )
        return try await self.getInstances(input, logger: logger)
    }

    /// Returns information about a specific key pair.
    @Sendable
    @inlinable
    public func getKeyPair(_ input: GetKeyPairRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetKeyPairResult {
        try await self.client.execute(
            operation: "GetKeyPair", 
            path: "/ls/api/2016-11-28/GetKeyPair", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific key pair.
    ///
    /// Parameters:
    ///   - keyPairName: The name of the key pair for which you are requesting information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getKeyPair(
        keyPairName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetKeyPairResult {
        let input = GetKeyPairRequest(
            keyPairName: keyPairName
        )
        return try await self.getKeyPair(input, logger: logger)
    }

    /// Returns information about all key pairs in the user's account.
    @Sendable
    @inlinable
    public func getKeyPairs(_ input: GetKeyPairsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetKeyPairsResult {
        try await self.client.execute(
            operation: "GetKeyPairs", 
            path: "/ls/api/2016-11-28/GetKeyPairs", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all key pairs in the user's account.
    ///
    /// Parameters:
    ///   - includeDefaultKeyPair: A Boolean value that indicates whether to include the default key pair in the response of your request.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetKeyPairs request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getKeyPairs(
        includeDefaultKeyPair: Bool? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetKeyPairsResult {
        let input = GetKeyPairsRequest(
            includeDefaultKeyPair: includeDefaultKeyPair, 
            pageToken: pageToken
        )
        return try await self.getKeyPairs(input, logger: logger)
    }

    /// Returns information about the specified Lightsail load balancer.
    @Sendable
    @inlinable
    public func getLoadBalancer(_ input: GetLoadBalancerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLoadBalancerResult {
        try await self.client.execute(
            operation: "GetLoadBalancer", 
            path: "/ls/api/2016-11-28/GetLoadBalancer", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the specified Lightsail load balancer.
    ///
    /// Parameters:
    ///   - loadBalancerName: The name of the load balancer.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLoadBalancer(
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLoadBalancerResult {
        let input = GetLoadBalancerRequest(
            loadBalancerName: loadBalancerName
        )
        return try await self.getLoadBalancer(input, logger: logger)
    }

    /// Returns information about health metrics for your Lightsail load balancer. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    @Sendable
    @inlinable
    public func getLoadBalancerMetricData(_ input: GetLoadBalancerMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLoadBalancerMetricDataResult {
        try await self.client.execute(
            operation: "GetLoadBalancerMetricData", 
            path: "/ls/api/2016-11-28/GetLoadBalancerMetricData", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about health metrics for your Lightsail load balancer. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    ///
    /// Parameters:
    ///   - endTime: The end time of the period.
    ///   - loadBalancerName: The name of the load balancer.
    ///   - metricName: The metric for which you want to return information. Valid load balancer metric names are listed below, along with the most useful statistics to include in your request, and the published unit value.     ClientTLSNegotiationErrorCount - The number of TLS connections initiated by the client that did not establish a session with the load balancer due to a TLS error generated by the load balancer. Possible causes include a mismatch of ciphers or protocols.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.     HealthyHostCount - The number of target instances that are considered healthy.  Statistics: The most useful statistic are Average, Minimum, and Maximum.  Unit: The published unit is Count.     HTTPCode_Instance_2XX_Count - The number of HTTP 2XX response codes generated by the target instances. This does not include any response codes generated by the load balancer.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     HTTPCode_Instance_3XX_Count - The number of HTTP 3XX response codes generated by the target instances. This does not include any response codes generated by the load balancer.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     HTTPCode_Instance_4XX_Count - The number of HTTP 4XX response codes generated by the target instances. This does not include any response codes generated by the load balancer.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     HTTPCode_Instance_5XX_Count - The number of HTTP 5XX response codes generated by the target instances. This does not include any response codes generated by the load balancer.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     HTTPCode_LB_4XX_Count - The number of HTTP 4XX client error codes that originated from the load balancer. Client errors are generated when requests are malformed or incomplete. These requests were not received by the target instance. This count does not include response codes generated by the target instances.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     HTTPCode_LB_5XX_Count - The number of HTTP 5XX server error codes that originated from the load balancer. This does not include any response codes generated by the target instance. This metric is reported if there are no healthy instances attached to the load balancer, or if the request rate exceeds the capacity of the instances (spillover) or the load balancer.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     InstanceResponseTime - The time elapsed, in seconds, after the request leaves the load balancer until a response from the target instance is received.  Statistics: The most useful statistic is Average.  Unit: The published unit is Seconds.     RejectedConnectionCount - The number of connections that were rejected because the load balancer had reached its maximum number of connections.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.     RequestCount - The number of requests processed over IPv4. This count includes only the requests with a response generated by a target instance of the load balancer.  Statistics: The most useful statistic is Sum. Note that Minimum, Maximum, and Average all return 1.  Unit: The published unit is Count.     UnhealthyHostCount - The number of target instances that are considered unhealthy.  Statistics: The most useful statistic are Average, Minimum, and Maximum.  Unit: The published unit is Count.
    ///   - period: The granularity, in seconds, of the returned data points.
    ///   - startTime: The start time of the period.
    ///   - statistics: The statistic for the metric. The following statistics are available:    Minimum - The lowest value observed during the specified period. Use this value to determine low volumes of activity for your application.    Maximum - The highest value observed during the specified period. Use this value to determine high volumes of activity for your application.    Sum - All values submitted for the matching metric added together. You can use this statistic to determine the total volume of a metric.    Average - The value of Sum / SampleCount during the specified period. By comparing this statistic with the Minimum and Maximum values, you can determine the full scope of a metric and how close the average use is to the Minimum and Maximum values. This comparison helps you to know when to increase or decrease your resources.    SampleCount - The count, or number, of data points used for the statistical calculation.
    ///   - unit: The unit for the metric data request. Valid units depend on the metric data being requested. For the valid units with each available metric, see the metricName parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLoadBalancerMetricData(
        endTime: Date,
        loadBalancerName: String,
        metricName: LoadBalancerMetricName,
        period: Int,
        startTime: Date,
        statistics: [MetricStatistic],
        unit: MetricUnit,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLoadBalancerMetricDataResult {
        let input = GetLoadBalancerMetricDataRequest(
            endTime: endTime, 
            loadBalancerName: loadBalancerName, 
            metricName: metricName, 
            period: period, 
            startTime: startTime, 
            statistics: statistics, 
            unit: unit
        )
        return try await self.getLoadBalancerMetricData(input, logger: logger)
    }

    /// Returns information about the TLS certificates that are associated with the specified Lightsail load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL). You can have a maximum of 2 certificates associated with a Lightsail load balancer. One is active and the other is inactive.
    @Sendable
    @inlinable
    public func getLoadBalancerTlsCertificates(_ input: GetLoadBalancerTlsCertificatesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLoadBalancerTlsCertificatesResult {
        try await self.client.execute(
            operation: "GetLoadBalancerTlsCertificates", 
            path: "/ls/api/2016-11-28/GetLoadBalancerTlsCertificates", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the TLS certificates that are associated with the specified Lightsail load balancer. TLS is just an updated, more secure version of Secure Socket Layer (SSL). You can have a maximum of 2 certificates associated with a Lightsail load balancer. One is active and the other is inactive.
    ///
    /// Parameters:
    ///   - loadBalancerName: The name of the load balancer you associated with your SSL/TLS certificate.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLoadBalancerTlsCertificates(
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLoadBalancerTlsCertificatesResult {
        let input = GetLoadBalancerTlsCertificatesRequest(
            loadBalancerName: loadBalancerName
        )
        return try await self.getLoadBalancerTlsCertificates(input, logger: logger)
    }

    /// Returns a list of TLS security policies that you can apply to Lightsail load balancers. For more information about load balancer TLS security policies, see Configuring TLS security policies on your Amazon Lightsail load balancers in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func getLoadBalancerTlsPolicies(_ input: GetLoadBalancerTlsPoliciesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLoadBalancerTlsPoliciesResult {
        try await self.client.execute(
            operation: "GetLoadBalancerTlsPolicies", 
            path: "/ls/api/2016-11-28/GetLoadBalancerTlsPolicies", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of TLS security policies that you can apply to Lightsail load balancers. For more information about load balancer TLS security policies, see Configuring TLS security policies on your Amazon Lightsail load balancers in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetLoadBalancerTlsPolicies request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLoadBalancerTlsPolicies(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLoadBalancerTlsPoliciesResult {
        let input = GetLoadBalancerTlsPoliciesRequest(
            pageToken: pageToken
        )
        return try await self.getLoadBalancerTlsPolicies(input, logger: logger)
    }

    /// Returns information about all load balancers in an account.
    @Sendable
    @inlinable
    public func getLoadBalancers(_ input: GetLoadBalancersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetLoadBalancersResult {
        try await self.client.execute(
            operation: "GetLoadBalancers", 
            path: "/ls/api/2016-11-28/GetLoadBalancers", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all load balancers in an account.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetLoadBalancers request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getLoadBalancers(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetLoadBalancersResult {
        let input = GetLoadBalancersRequest(
            pageToken: pageToken
        )
        return try await self.getLoadBalancers(input, logger: logger)
    }

    /// Returns information about a specific operation. Operations include events such as when you create an instance, allocate a static IP, attach a static IP, and so on.
    @Sendable
    @inlinable
    public func getOperation(_ input: GetOperationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOperationResult {
        try await self.client.execute(
            operation: "GetOperation", 
            path: "/ls/api/2016-11-28/GetOperation", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific operation. Operations include events such as when you create an instance, allocate a static IP, attach a static IP, and so on.
    ///
    /// Parameters:
    ///   - operationId: A GUID used to identify the operation.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOperation(
        operationId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOperationResult {
        let input = GetOperationRequest(
            operationId: operationId
        )
        return try await self.getOperation(input, logger: logger)
    }

    /// Returns information about all operations. Results are returned from oldest to newest, up to a maximum of 200. Results can be paged by making each subsequent call to GetOperations use the maximum (last) statusChangedAt value from the previous request.
    @Sendable
    @inlinable
    public func getOperations(_ input: GetOperationsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOperationsResult {
        try await self.client.execute(
            operation: "GetOperations", 
            path: "/ls/api/2016-11-28/GetOperations", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all operations. Results are returned from oldest to newest, up to a maximum of 200. Results can be paged by making each subsequent call to GetOperations use the maximum (last) statusChangedAt value from the previous request.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetOperations request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOperations(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOperationsResult {
        let input = GetOperationsRequest(
            pageToken: pageToken
        )
        return try await self.getOperations(input, logger: logger)
    }

    /// Gets operations for a specific resource (an instance or a static IP).
    @Sendable
    @inlinable
    public func getOperationsForResource(_ input: GetOperationsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetOperationsForResourceResult {
        try await self.client.execute(
            operation: "GetOperationsForResource", 
            path: "/ls/api/2016-11-28/GetOperationsForResource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets operations for a specific resource (an instance or a static IP).
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetOperationsForResource request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - resourceName: The name of the resource for which you are requesting information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getOperationsForResource(
        pageToken: String? = nil,
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetOperationsForResourceResult {
        let input = GetOperationsForResourceRequest(
            pageToken: pageToken, 
            resourceName: resourceName
        )
        return try await self.getOperationsForResource(input, logger: logger)
    }

    /// Returns a list of all valid regions for Amazon Lightsail. Use the include availability zones parameter to also return the Availability Zones in a region.
    @Sendable
    @inlinable
    public func getRegions(_ input: GetRegionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRegionsResult {
        try await self.client.execute(
            operation: "GetRegions", 
            path: "/ls/api/2016-11-28/GetRegions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of all valid regions for Amazon Lightsail. Use the include availability zones parameter to also return the Availability Zones in a region.
    ///
    /// Parameters:
    ///   - includeAvailabilityZones: A Boolean value indicating whether to also include Availability Zones in your get regions request. Availability Zones are indicated with a letter: us-east-2a.
    ///   - includeRelationalDatabaseAvailabilityZones: A Boolean value indicating whether to also include Availability Zones for databases in your get regions request. Availability Zones are indicated with a letter (us-east-2a).
    ///   - logger: Logger use during operation
    @inlinable
    public func getRegions(
        includeAvailabilityZones: Bool? = nil,
        includeRelationalDatabaseAvailabilityZones: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRegionsResult {
        let input = GetRegionsRequest(
            includeAvailabilityZones: includeAvailabilityZones, 
            includeRelationalDatabaseAvailabilityZones: includeRelationalDatabaseAvailabilityZones
        )
        return try await self.getRegions(input, logger: logger)
    }

    /// Returns information about a specific database in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabase(_ input: GetRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseResult {
        try await self.client.execute(
            operation: "GetRelationalDatabase", 
            path: "/ls/api/2016-11-28/GetRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific database in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - relationalDatabaseName: The name of the database that you are looking up.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabase(
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseResult {
        let input = GetRelationalDatabaseRequest(
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.getRelationalDatabase(input, logger: logger)
    }

    /// Returns a list of available database blueprints in Amazon Lightsail. A blueprint describes the major engine version of a database. You can use a blueprint ID to create a new database that runs a specific database engine.
    @Sendable
    @inlinable
    public func getRelationalDatabaseBlueprints(_ input: GetRelationalDatabaseBlueprintsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseBlueprintsResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseBlueprints", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseBlueprints", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of available database blueprints in Amazon Lightsail. A blueprint describes the major engine version of a database. You can use a blueprint ID to create a new database that runs a specific database engine.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetRelationalDatabaseBlueprints request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseBlueprints(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseBlueprintsResult {
        let input = GetRelationalDatabaseBlueprintsRequest(
            pageToken: pageToken
        )
        return try await self.getRelationalDatabaseBlueprints(input, logger: logger)
    }

    /// Returns the list of bundles that are available in Amazon Lightsail. A bundle describes the performance specifications for a database. You can use a bundle ID to create a new database with explicit performance specifications.
    @Sendable
    @inlinable
    public func getRelationalDatabaseBundles(_ input: GetRelationalDatabaseBundlesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseBundlesResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseBundles", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseBundles", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the list of bundles that are available in Amazon Lightsail. A bundle describes the performance specifications for a database. You can use a bundle ID to create a new database with explicit performance specifications.
    ///
    /// Parameters:
    ///   - includeInactive: A Boolean value that indicates whether to include inactive (unavailable) bundles in the response of your request.
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetRelationalDatabaseBundles request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseBundles(
        includeInactive: Bool? = nil,
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseBundlesResult {
        let input = GetRelationalDatabaseBundlesRequest(
            includeInactive: includeInactive, 
            pageToken: pageToken
        )
        return try await self.getRelationalDatabaseBundles(input, logger: logger)
    }

    /// Returns a list of events for a specific database in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabaseEvents(_ input: GetRelationalDatabaseEventsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseEventsResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseEvents", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseEvents", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of events for a specific database in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - durationInMinutes: The number of minutes in the past from which to retrieve events. For example, to get all events from the past 2 hours, enter 120. Default: 60  The minimum is 1 and the maximum is 14 days (20160 minutes).
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetRelationalDatabaseEvents request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - relationalDatabaseName: The name of the database from which to get events.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseEvents(
        durationInMinutes: Int? = nil,
        pageToken: String? = nil,
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseEventsResult {
        let input = GetRelationalDatabaseEventsRequest(
            durationInMinutes: durationInMinutes, 
            pageToken: pageToken, 
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.getRelationalDatabaseEvents(input, logger: logger)
    }

    /// Returns a list of log events for a database in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabaseLogEvents(_ input: GetRelationalDatabaseLogEventsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseLogEventsResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseLogEvents", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseLogEvents", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of log events for a database in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - endTime: The end of the time interval from which to get log events. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use an end time of October 1, 2018, at 8 PM UTC, then you input 1538424000 as the end time.
    ///   - logStreamName: The name of the log stream. Use the get relational database log streams operation to get a list of available log streams.
    ///   - pageToken: The token to advance to the next or previous page of results from your request. To get a page token, perform an initial GetRelationalDatabaseLogEvents request. If your results are paginated, the response will return a next forward token and/or next backward token that you can specify as the page token in a subsequent request.
    ///   - relationalDatabaseName: The name of your database for which to get log events.
    ///   - startFromHead: Parameter to specify if the log should start from head or tail. If true is specified, the log event starts from the head of the log. If false is specified, the log event starts from the tail of the log.  For PostgreSQL, the default value of false is the only option available.
    ///   - startTime: The start of the time interval from which to get log events. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use a start time of October 1, 2018, at 8 PM UTC, then you input 1538424000 as the start time.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseLogEvents(
        endTime: Date? = nil,
        logStreamName: String,
        pageToken: String? = nil,
        relationalDatabaseName: String,
        startFromHead: Bool? = nil,
        startTime: Date? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseLogEventsResult {
        let input = GetRelationalDatabaseLogEventsRequest(
            endTime: endTime, 
            logStreamName: logStreamName, 
            pageToken: pageToken, 
            relationalDatabaseName: relationalDatabaseName, 
            startFromHead: startFromHead, 
            startTime: startTime
        )
        return try await self.getRelationalDatabaseLogEvents(input, logger: logger)
    }

    /// Returns a list of available log streams for a specific database in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabaseLogStreams(_ input: GetRelationalDatabaseLogStreamsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseLogStreamsResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseLogStreams", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseLogStreams", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a list of available log streams for a specific database in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - relationalDatabaseName: The name of your database for which to get log streams.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseLogStreams(
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseLogStreamsResult {
        let input = GetRelationalDatabaseLogStreamsRequest(
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.getRelationalDatabaseLogStreams(input, logger: logger)
    }

    /// Returns the current, previous, or pending versions of the master user password for a Lightsail database. The GetRelationalDatabaseMasterUserPassword operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName.
    @Sendable
    @inlinable
    public func getRelationalDatabaseMasterUserPassword(_ input: GetRelationalDatabaseMasterUserPasswordRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseMasterUserPasswordResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseMasterUserPassword", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseMasterUserPassword", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the current, previous, or pending versions of the master user password for a Lightsail database. The GetRelationalDatabaseMasterUserPassword operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName.
    ///
    /// Parameters:
    ///   - passwordVersion: The password version to return. Specifying CURRENT or PREVIOUS returns the current or previous passwords respectively. Specifying PENDING returns the newest version of the password that will rotate to CURRENT. After the PENDING password rotates to CURRENT, the PENDING password is no longer available. Default: CURRENT
    ///   - relationalDatabaseName: The name of your database for which to get the master user password.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseMasterUserPassword(
        passwordVersion: RelationalDatabasePasswordVersion? = nil,
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseMasterUserPasswordResult {
        let input = GetRelationalDatabaseMasterUserPasswordRequest(
            passwordVersion: passwordVersion, 
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.getRelationalDatabaseMasterUserPassword(input, logger: logger)
    }

    /// Returns the data points of the specified metric for a database in Amazon Lightsail. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    @Sendable
    @inlinable
    public func getRelationalDatabaseMetricData(_ input: GetRelationalDatabaseMetricDataRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseMetricDataResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseMetricData", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseMetricData", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns the data points of the specified metric for a database in Amazon Lightsail. Metrics report the utilization of your resources, and the error counts generated by them. Monitor and collect metric data regularly to maintain the reliability, availability, and performance of your resources.
    ///
    /// Parameters:
    ///   - endTime: The end of the time interval from which to get metric data. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use an end time of October 1, 2018, at 8 PM UTC, then you input 1538424000 as the end time.
    ///   - metricName: The metric for which you want to return information. Valid relational database metric names are listed below, along with the most useful statistics to include in your request, and the published unit value. All relational database metric data is available in 1-minute (60 seconds) granularity.     CPUUtilization - The percentage of CPU utilization currently in use on the database.  Statistics: The most useful statistics are Maximum and Average.  Unit: The published unit is Percent.     DatabaseConnections - The number of database connections in use.  Statistics: The most useful statistics are Maximum and Sum.  Unit: The published unit is Count.     DiskQueueDepth - The number of outstanding IOs (read/write requests) that are waiting to access the disk.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Count.     FreeStorageSpace - The amount of available storage space.  Statistics: The most useful statistic is Sum.  Unit: The published unit is Bytes.     NetworkReceiveThroughput - The incoming (Receive) network traffic on the database, including both customer database traffic and AWS traffic used for monitoring and replication.  Statistics: The most useful statistic is Average.  Unit: The published unit is Bytes/Second.     NetworkTransmitThroughput - The outgoing (Transmit) network traffic on the database, including both customer database traffic and AWS traffic used for monitoring and replication.  Statistics: The most useful statistic is Average.  Unit: The published unit is Bytes/Second.
    ///   - period: The granularity, in seconds, of the returned data points. All relational database metric data is available in 1-minute (60 seconds) granularity.
    ///   - relationalDatabaseName: The name of your database from which to get metric data.
    ///   - startTime: The start of the time interval from which to get metric data. Constraints:   Specified in Coordinated Universal Time (UTC).   Specified in the Unix time format. For example, if you wish to use a start time of October 1, 2018, at 8 PM UTC, then you input 1538424000 as the start time.
    ///   - statistics: The statistic for the metric. The following statistics are available:    Minimum - The lowest value observed during the specified period. Use this value to determine low volumes of activity for your application.    Maximum - The highest value observed during the specified period. Use this value to determine high volumes of activity for your application.    Sum - All values submitted for the matching metric added together. You can use this statistic to determine the total volume of a metric.    Average - The value of Sum / SampleCount during the specified period. By comparing this statistic with the Minimum and Maximum values, you can determine the full scope of a metric and how close the average use is to the Minimum and Maximum values. This comparison helps you to know when to increase or decrease your resources.    SampleCount - The count, or number, of data points used for the statistical calculation.
    ///   - unit: The unit for the metric data request. Valid units depend on the metric data being requested. For the valid units with each available metric, see the metricName parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseMetricData(
        endTime: Date,
        metricName: RelationalDatabaseMetricName,
        period: Int,
        relationalDatabaseName: String,
        startTime: Date,
        statistics: [MetricStatistic],
        unit: MetricUnit,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseMetricDataResult {
        let input = GetRelationalDatabaseMetricDataRequest(
            endTime: endTime, 
            metricName: metricName, 
            period: period, 
            relationalDatabaseName: relationalDatabaseName, 
            startTime: startTime, 
            statistics: statistics, 
            unit: unit
        )
        return try await self.getRelationalDatabaseMetricData(input, logger: logger)
    }

    /// Returns all of the runtime parameters offered by the underlying database software, or engine, for a specific database in Amazon Lightsail. In addition to the parameter names and values, this operation returns other information about each parameter. This information includes whether changes require a reboot, whether the parameter is modifiable, the allowed values, and the data types.
    @Sendable
    @inlinable
    public func getRelationalDatabaseParameters(_ input: GetRelationalDatabaseParametersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseParametersResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseParameters", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseParameters", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns all of the runtime parameters offered by the underlying database software, or engine, for a specific database in Amazon Lightsail. In addition to the parameter names and values, this operation returns other information about each parameter. This information includes whether changes require a reboot, whether the parameter is modifiable, the allowed values, and the data types.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetRelationalDatabaseParameters request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - relationalDatabaseName: The name of your database for which to get parameters.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseParameters(
        pageToken: String? = nil,
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseParametersResult {
        let input = GetRelationalDatabaseParametersRequest(
            pageToken: pageToken, 
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.getRelationalDatabaseParameters(input, logger: logger)
    }

    /// Returns information about a specific database snapshot in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabaseSnapshot(_ input: GetRelationalDatabaseSnapshotRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseSnapshotResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseSnapshot", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseSnapshot", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about a specific database snapshot in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - relationalDatabaseSnapshotName: The name of the database snapshot for which to get information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseSnapshot(
        relationalDatabaseSnapshotName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseSnapshotResult {
        let input = GetRelationalDatabaseSnapshotRequest(
            relationalDatabaseSnapshotName: relationalDatabaseSnapshotName
        )
        return try await self.getRelationalDatabaseSnapshot(input, logger: logger)
    }

    /// Returns information about all of your database snapshots in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabaseSnapshots(_ input: GetRelationalDatabaseSnapshotsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabaseSnapshotsResult {
        try await self.client.execute(
            operation: "GetRelationalDatabaseSnapshots", 
            path: "/ls/api/2016-11-28/GetRelationalDatabaseSnapshots", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all of your database snapshots in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetRelationalDatabaseSnapshots request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabaseSnapshots(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabaseSnapshotsResult {
        let input = GetRelationalDatabaseSnapshotsRequest(
            pageToken: pageToken
        )
        return try await self.getRelationalDatabaseSnapshots(input, logger: logger)
    }

    /// Returns information about all of your databases in Amazon Lightsail.
    @Sendable
    @inlinable
    public func getRelationalDatabases(_ input: GetRelationalDatabasesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetRelationalDatabasesResult {
        try await self.client.execute(
            operation: "GetRelationalDatabases", 
            path: "/ls/api/2016-11-28/GetRelationalDatabases", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all of your databases in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetRelationalDatabases request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getRelationalDatabases(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetRelationalDatabasesResult {
        let input = GetRelationalDatabasesRequest(
            pageToken: pageToken
        )
        return try await self.getRelationalDatabases(input, logger: logger)
    }

    /// Returns detailed information for five of the most recent SetupInstanceHttps requests that were ran on the target instance.
    @Sendable
    @inlinable
    public func getSetupHistory(_ input: GetSetupHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetSetupHistoryResult {
        try await self.client.execute(
            operation: "GetSetupHistory", 
            path: "/ls/api/2016-11-28/get-setup-history", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns detailed information for five of the most recent SetupInstanceHttps requests that were ran on the target instance.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetSetupHistory request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - resourceName: The name of the resource for which you are requesting information.
    ///   - logger: Logger use during operation
    @inlinable
    public func getSetupHistory(
        pageToken: String? = nil,
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetSetupHistoryResult {
        let input = GetSetupHistoryRequest(
            pageToken: pageToken, 
            resourceName: resourceName
        )
        return try await self.getSetupHistory(input, logger: logger)
    }

    /// Returns information about an Amazon Lightsail static IP.
    @Sendable
    @inlinable
    public func getStaticIp(_ input: GetStaticIpRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetStaticIpResult {
        try await self.client.execute(
            operation: "GetStaticIp", 
            path: "/ls/api/2016-11-28/GetStaticIp", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about an Amazon Lightsail static IP.
    ///
    /// Parameters:
    ///   - staticIpName: The name of the static IP in Lightsail.
    ///   - logger: Logger use during operation
    @inlinable
    public func getStaticIp(
        staticIpName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetStaticIpResult {
        let input = GetStaticIpRequest(
            staticIpName: staticIpName
        )
        return try await self.getStaticIp(input, logger: logger)
    }

    /// Returns information about all static IPs in the user's account.
    @Sendable
    @inlinable
    public func getStaticIps(_ input: GetStaticIpsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> GetStaticIpsResult {
        try await self.client.execute(
            operation: "GetStaticIps", 
            path: "/ls/api/2016-11-28/GetStaticIps", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about all static IPs in the user's account.
    ///
    /// Parameters:
    ///   - pageToken: The token to advance to the next page of results from your request. To get a page token, perform an initial GetStaticIps request. If your results are paginated, the response will return a next page token that you can specify as the page token in a subsequent request.
    ///   - logger: Logger use during operation
    @inlinable
    public func getStaticIps(
        pageToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> GetStaticIpsResult {
        let input = GetStaticIpsRequest(
            pageToken: pageToken
        )
        return try await self.getStaticIps(input, logger: logger)
    }

    /// Imports a public SSH key from a specific key pair.
    @Sendable
    @inlinable
    public func importKeyPair(_ input: ImportKeyPairRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ImportKeyPairResult {
        try await self.client.execute(
            operation: "ImportKeyPair", 
            path: "/ls/api/2016-11-28/ImportKeyPair", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Imports a public SSH key from a specific key pair.
    ///
    /// Parameters:
    ///   - keyPairName: The name of the key pair for which you want to import the public key.
    ///   - publicKeyBase64: A base64-encoded public key of the ssh-rsa type.
    ///   - logger: Logger use during operation
    @inlinable
    public func importKeyPair(
        keyPairName: String,
        publicKeyBase64: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ImportKeyPairResult {
        let input = ImportKeyPairRequest(
            keyPairName: keyPairName, 
            publicKeyBase64: publicKeyBase64
        )
        return try await self.importKeyPair(input, logger: logger)
    }

    /// Returns a Boolean value indicating whether your Lightsail VPC is peered.
    @Sendable
    @inlinable
    public func isVpcPeered(_ input: IsVpcPeeredRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> IsVpcPeeredResult {
        try await self.client.execute(
            operation: "IsVpcPeered", 
            path: "/ls/api/2016-11-28/IsVpcPeered", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns a Boolean value indicating whether your Lightsail VPC is peered.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func isVpcPeered(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> IsVpcPeeredResult {
        let input = IsVpcPeeredRequest(
        )
        return try await self.isVpcPeered(input, logger: logger)
    }

    /// Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol. The OpenInstancePublicPorts action supports tag-based access control via resource tags applied to the resource identified by instanceName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func openInstancePublicPorts(_ input: OpenInstancePublicPortsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> OpenInstancePublicPortsResult {
        try await self.client.execute(
            operation: "OpenInstancePublicPorts", 
            path: "/ls/api/2016-11-28/OpenInstancePublicPorts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol. The OpenInstancePublicPorts action supports tag-based access control via resource tags applied to the resource identified by instanceName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance for which to open ports.
    ///   - portInfo: An object to describe the ports to open for the specified instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func openInstancePublicPorts(
        instanceName: String,
        portInfo: PortInfo,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> OpenInstancePublicPortsResult {
        let input = OpenInstancePublicPortsRequest(
            instanceName: instanceName, 
            portInfo: portInfo
        )
        return try await self.openInstancePublicPorts(input, logger: logger)
    }

    /// Peers the Lightsail VPC with the user's default VPC.
    @Sendable
    @inlinable
    public func peerVpc(_ input: PeerVpcRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PeerVpcResult {
        try await self.client.execute(
            operation: "PeerVpc", 
            path: "/ls/api/2016-11-28/PeerVpc", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Peers the Lightsail VPC with the user's default VPC.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func peerVpc(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PeerVpcResult {
        let input = PeerVpcRequest(
        )
        return try await self.peerVpc(input, logger: logger)
    }

    /// Creates or updates an alarm, and associates it with the specified metric. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail. When this action creates an alarm, the alarm state is immediately set to INSUFFICIENT_DATA. The alarm is then evaluated and its state is set appropriately. Any actions associated with the new state are then executed. When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm. The alarm is then evaluated with the updated configuration.
    @Sendable
    @inlinable
    public func putAlarm(_ input: PutAlarmRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutAlarmResult {
        try await self.client.execute(
            operation: "PutAlarm", 
            path: "/ls/api/2016-11-28/PutAlarm", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates or updates an alarm, and associates it with the specified metric. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail. When this action creates an alarm, the alarm state is immediately set to INSUFFICIENT_DATA. The alarm is then evaluated and its state is set appropriately. Any actions associated with the new state are then executed. When you update an existing alarm, its state is left unchanged, but the update completely overwrites the previous configuration of the alarm. The alarm is then evaluated with the updated configuration.
    ///
    /// Parameters:
    ///   - alarmName: The name for the alarm. Specify the name of an existing alarm to update, and overwrite the previous configuration of the alarm.
    ///   - comparisonOperator: The arithmetic operation to use when comparing the specified statistic to the threshold. The specified statistic value is used as the first operand.
    ///   - contactProtocols: The contact protocols to use for the alarm, such as Email, SMS (text messaging), or both. A notification is sent via the specified contact protocol if notifications are enabled for the alarm, and when the alarm is triggered. A notification is not sent if a contact protocol is not specified, if the specified contact protocol is not configured in the Amazon Web Services Region, or if notifications are not enabled for the alarm using the notificationEnabled paramater. Use the CreateContactMethod action to configure a contact protocol in an Amazon Web Services Region.
    ///   - datapointsToAlarm: The number of data points that must be not within the specified threshold to trigger the alarm. If you are setting an "M out of N" alarm, this value (datapointsToAlarm) is the M.
    ///   - evaluationPeriods: The number of most recent periods over which data is compared to the specified threshold. If you are setting an "M out of N" alarm, this value (evaluationPeriods) is the N. If you are setting an alarm that requires that a number of consecutive data points be breaching to trigger the alarm, this value specifies the rolling period of time in which data points are evaluated. Each evaluation period is five minutes long. For example, specify an evaluation period of 24 to evaluate a metric over a rolling period of two hours. You can specify a minimum valuation period of 1 (5 minutes), and a maximum evaluation period of 288 (24 hours).
    ///   - metricName: The name of the metric to associate with the alarm. You can configure up to two alarms per metric. The following metrics are available for each resource type:    Instances: BurstCapacityPercentage, BurstCapacityTime, CPUUtilization, NetworkIn, NetworkOut, StatusCheckFailed, StatusCheckFailed_Instance, and StatusCheckFailed_System.    Load balancers: ClientTLSNegotiationErrorCount, HealthyHostCount, UnhealthyHostCount, HTTPCode_LB_4XX_Count, HTTPCode_LB_5XX_Count, HTTPCode_Instance_2XX_Count, HTTPCode_Instance_3XX_Count, HTTPCode_Instance_4XX_Count, HTTPCode_Instance_5XX_Count, InstanceResponseTime, RejectedConnectionCount, and RequestCount.    Relational databases: CPUUtilization, DatabaseConnections, DiskQueueDepth, FreeStorageSpace, NetworkReceiveThroughput, and NetworkTransmitThroughput.   For more information about these metrics, see Metrics available in Lightsail.
    ///   - monitoredResourceName: The name of the Lightsail resource that will be monitored. Instances, load balancers, and relational databases are the only Lightsail resources that can currently be monitored by alarms.
    ///   - notificationEnabled: Indicates whether the alarm is enabled. Notifications are enabled by default if you don't specify this parameter.
    ///   - notificationTriggers: The alarm states that trigger a notification. An alarm has the following possible states:    ALARM - The metric is outside of the defined threshold.    INSUFFICIENT_DATA - The alarm has just started, the metric is not available, or not enough data is available for the metric to determine the alarm state.    OK - The metric is within the defined threshold.   When you specify a notification trigger, the ALARM state must be specified. The INSUFFICIENT_DATA and OK states can be specified in addition to the ALARM state.   If you specify OK as an alarm trigger, a notification is sent when the alarm switches from an ALARM or INSUFFICIENT_DATA alarm state to an OK state. This can be thought of as an all clear alarm notification.   If you specify INSUFFICIENT_DATA as the alarm trigger, a notification is sent when the alarm switches from an OK or ALARM alarm state to an INSUFFICIENT_DATA state.   The notification trigger defaults to ALARM if you don't specify this parameter.
    ///   - threshold: The value against which the specified statistic is compared.
    ///   - treatMissingData: Sets how this alarm will handle missing data points. An alarm can treat missing data in the following ways:    breaching - Assume the missing data is not within the threshold. Missing data counts towards the number of times the metric is not within the threshold.    notBreaching - Assume the missing data is within the threshold. Missing data does not count towards the number of times the metric is not within the threshold.    ignore - Ignore the missing data. Maintains the current alarm state.    missing - Missing data is treated as missing.   If treatMissingData is not specified, the default behavior of missing is used.
    ///   - logger: Logger use during operation
    @inlinable
    public func putAlarm(
        alarmName: String,
        comparisonOperator: ComparisonOperator,
        contactProtocols: [ContactProtocol]? = nil,
        datapointsToAlarm: Int? = nil,
        evaluationPeriods: Int,
        metricName: MetricName,
        monitoredResourceName: String,
        notificationEnabled: Bool? = nil,
        notificationTriggers: [AlarmState]? = nil,
        threshold: Double,
        treatMissingData: TreatMissingData? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutAlarmResult {
        let input = PutAlarmRequest(
            alarmName: alarmName, 
            comparisonOperator: comparisonOperator, 
            contactProtocols: contactProtocols, 
            datapointsToAlarm: datapointsToAlarm, 
            evaluationPeriods: evaluationPeriods, 
            metricName: metricName, 
            monitoredResourceName: monitoredResourceName, 
            notificationEnabled: notificationEnabled, 
            notificationTriggers: notificationTriggers, 
            threshold: threshold, 
            treatMissingData: treatMissingData
        )
        return try await self.putAlarm(input, logger: logger)
    }

    /// Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol. This action also closes all currently open ports that are not included in the request. Include all of the ports and the protocols you want to open in your PutInstancePublicPortsrequest. Or use the OpenInstancePublicPorts action to open ports without closing currently open ports. The PutInstancePublicPorts action supports tag-based access control via resource tags applied to the resource identified by instanceName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func putInstancePublicPorts(_ input: PutInstancePublicPortsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutInstancePublicPortsResult {
        try await self.client.execute(
            operation: "PutInstancePublicPorts", 
            path: "/ls/api/2016-11-28/PutInstancePublicPorts", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Opens ports for a specific Amazon Lightsail instance, and specifies the IP addresses allowed to connect to the instance through the ports, and the protocol. This action also closes all currently open ports that are not included in the request. Include all of the ports and the protocols you want to open in your PutInstancePublicPortsrequest. Or use the OpenInstancePublicPorts action to open ports without closing currently open ports. The PutInstancePublicPorts action supports tag-based access control via resource tags applied to the resource identified by instanceName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance for which to open ports.
    ///   - portInfos: An array of objects to describe the ports to open for the specified instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func putInstancePublicPorts(
        instanceName: String,
        portInfos: [PortInfo],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutInstancePublicPortsResult {
        let input = PutInstancePublicPortsRequest(
            instanceName: instanceName, 
            portInfos: portInfos
        )
        return try await self.putInstancePublicPorts(input, logger: logger)
    }

    /// Restarts a specific instance. The reboot instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func rebootInstance(_ input: RebootInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RebootInstanceResult {
        try await self.client.execute(
            operation: "RebootInstance", 
            path: "/ls/api/2016-11-28/RebootInstance", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Restarts a specific instance. The reboot instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance to reboot.
    ///   - logger: Logger use during operation
    @inlinable
    public func rebootInstance(
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RebootInstanceResult {
        let input = RebootInstanceRequest(
            instanceName: instanceName
        )
        return try await self.rebootInstance(input, logger: logger)
    }

    /// Restarts a specific database in Amazon Lightsail. The reboot relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func rebootRelationalDatabase(_ input: RebootRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RebootRelationalDatabaseResult {
        try await self.client.execute(
            operation: "RebootRelationalDatabase", 
            path: "/ls/api/2016-11-28/RebootRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Restarts a specific database in Amazon Lightsail. The reboot relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - relationalDatabaseName: The name of your database to reboot.
    ///   - logger: Logger use during operation
    @inlinable
    public func rebootRelationalDatabase(
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RebootRelationalDatabaseResult {
        let input = RebootRelationalDatabaseRequest(
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.rebootRelationalDatabase(input, logger: logger)
    }

    /// Registers a container image to your Amazon Lightsail container service.  This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see Pushing and managing container images on your Amazon Lightsail container services in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func registerContainerImage(_ input: RegisterContainerImageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> RegisterContainerImageResult {
        try await self.client.execute(
            operation: "RegisterContainerImage", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}/images", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Registers a container image to your Amazon Lightsail container service.  This action is not required if you install and use the Lightsail Control (lightsailctl) plugin to push container images to your Lightsail container service. For more information, see Pushing and managing container images on your Amazon Lightsail container services in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - digest: The digest of the container image to be registered.
    ///   - label: The label for the container image when it's registered to the container service. Use a descriptive label that you can use to track the different versions of your registered container images. Use the GetContainerImages action to return the container images registered to a Lightsail container service. The label is the  portion of the following image name example:    :container-service-1..1    If the name of your container service is mycontainerservice, and the label that you specify is mystaticwebsite, then the name of the registered container image will be :mycontainerservice.mystaticwebsite.1. The number at the end of these image name examples represents the version of the registered container image. If you push and register another container image to the same Lightsail container service, with the same label, then the version number for the new registered container image will be 2. If you push and register another container image, the version number will be 3, and so on.
    ///   - serviceName: The name of the container service for which to register a container image.
    ///   - logger: Logger use during operation
    @inlinable
    public func registerContainerImage(
        digest: String,
        label: String,
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> RegisterContainerImageResult {
        let input = RegisterContainerImageRequest(
            digest: digest, 
            label: label, 
            serviceName: serviceName
        )
        return try await self.registerContainerImage(input, logger: logger)
    }

    /// Deletes a specific static IP from your account.
    @Sendable
    @inlinable
    public func releaseStaticIp(_ input: ReleaseStaticIpRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ReleaseStaticIpResult {
        try await self.client.execute(
            operation: "ReleaseStaticIp", 
            path: "/ls/api/2016-11-28/ReleaseStaticIp", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a specific static IP from your account.
    ///
    /// Parameters:
    ///   - staticIpName: The name of the static IP to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func releaseStaticIp(
        staticIpName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ReleaseStaticIpResult {
        let input = ReleaseStaticIpRequest(
            staticIpName: staticIpName
        )
        return try await self.releaseStaticIp(input, logger: logger)
    }

    /// Deletes currently cached content from your Amazon Lightsail content delivery network (CDN) distribution. After resetting the cache, the next time a content request is made, your distribution pulls, serves, and caches it from the origin.
    @Sendable
    @inlinable
    public func resetDistributionCache(_ input: ResetDistributionCacheRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ResetDistributionCacheResult {
        try await self.client.execute(
            operation: "ResetDistributionCache", 
            path: "/ls/api/2016-11-28/ResetDistributionCache", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes currently cached content from your Amazon Lightsail content delivery network (CDN) distribution. After resetting the cache, the next time a content request is made, your distribution pulls, serves, and caches it from the origin.
    ///
    /// Parameters:
    ///   - distributionName: The name of the distribution for which to reset cache. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func resetDistributionCache(
        distributionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ResetDistributionCacheResult {
        let input = ResetDistributionCacheRequest(
            distributionName: distributionName
        )
        return try await self.resetDistributionCache(input, logger: logger)
    }

    /// Sends a verification request to an email contact method to ensure it's owned by the requester. SMS contact methods don't need to be verified. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail. A verification request is sent to the contact method when you initially create it. Use this action to send another verification request if a previous verification request was deleted, or has expired.  Notifications are not sent to an email contact method until after it is verified, and confirmed as valid.
    @Sendable
    @inlinable
    public func sendContactMethodVerification(_ input: SendContactMethodVerificationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SendContactMethodVerificationResult {
        try await self.client.execute(
            operation: "SendContactMethodVerification", 
            path: "/ls/api/2016-11-28/SendContactMethodVerification", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sends a verification request to an email contact method to ensure it's owned by the requester. SMS contact methods don't need to be verified. A contact method is used to send you notifications about your Amazon Lightsail resources. You can add one email address and one mobile phone number contact method in each Amazon Web Services Region. However, SMS text messaging is not supported in some Amazon Web Services Regions, and SMS text messages cannot be sent to some countries/regions. For more information, see Notifications in Amazon Lightsail. A verification request is sent to the contact method when you initially create it. Use this action to send another verification request if a previous verification request was deleted, or has expired.  Notifications are not sent to an email contact method until after it is verified, and confirmed as valid.
    ///
    /// Parameters:
    ///   - protocol: The protocol to verify, such as Email or SMS (text messaging).
    ///   - logger: Logger use during operation
    @inlinable
    public func sendContactMethodVerification(
        protocol: ContactMethodVerificationProtocol,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SendContactMethodVerificationResult {
        let input = SendContactMethodVerificationRequest(
            protocol: `protocol`
        )
        return try await self.sendContactMethodVerification(input, logger: logger)
    }

    /// Sets the IP address type for an Amazon Lightsail resource. Use this action to enable dual-stack for a resource, which enables IPv4 and IPv6 for the specified resource. Alternately, you can use this action to disable dual-stack, and enable IPv4 only.
    @Sendable
    @inlinable
    public func setIpAddressType(_ input: SetIpAddressTypeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SetIpAddressTypeResult {
        try await self.client.execute(
            operation: "SetIpAddressType", 
            path: "/ls/api/2016-11-28/SetIpAddressType", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets the IP address type for an Amazon Lightsail resource. Use this action to enable dual-stack for a resource, which enables IPv4 and IPv6 for the specified resource. Alternately, you can use this action to disable dual-stack, and enable IPv4 only.
    ///
    /// Parameters:
    ///   - acceptBundleUpdate: Required parameter to accept the instance bundle update when changing to, and from, IPv6-only.  An instance bundle will change when switching from dual-stack or ipv4, to ipv6. It also changes when switching from ipv6, to dual-stack or ipv4. You must include this parameter in the command to update the bundle. For example, if you switch from dual-stack to ipv6, the bundle will be updated, and billing for the IPv6-only instance bundle begins immediately.
    ///   - ipAddressType: The IP address type to set for the specified resource. The possible values are ipv4 for IPv4 only, ipv6 for IPv6 only, and dualstack for IPv4 and IPv6.
    ///   - resourceName: The name of the resource for which to set the IP address type.
    ///   - resourceType: The resource type. The resource values are Distribution, Instance, and LoadBalancer.  Distribution-related APIs are available only in the N. Virginia (us-east-1) Amazon Web Services Region. Set your Amazon Web Services Region configuration to us-east-1 to create, view, or edit distributions.
    ///   - logger: Logger use during operation
    @inlinable
    public func setIpAddressType(
        acceptBundleUpdate: Bool? = nil,
        ipAddressType: IpAddressType,
        resourceName: String,
        resourceType: ResourceType,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SetIpAddressTypeResult {
        let input = SetIpAddressTypeRequest(
            acceptBundleUpdate: acceptBundleUpdate, 
            ipAddressType: ipAddressType, 
            resourceName: resourceName, 
            resourceType: resourceType
        )
        return try await self.setIpAddressType(input, logger: logger)
    }

    /// Sets the Amazon Lightsail resources that can access the specified Lightsail bucket. Lightsail buckets currently support setting access for Lightsail instances in the same Amazon Web Services Region.
    @Sendable
    @inlinable
    public func setResourceAccessForBucket(_ input: SetResourceAccessForBucketRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SetResourceAccessForBucketResult {
        try await self.client.execute(
            operation: "SetResourceAccessForBucket", 
            path: "/ls/api/2016-11-28/SetResourceAccessForBucket", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Sets the Amazon Lightsail resources that can access the specified Lightsail bucket. Lightsail buckets currently support setting access for Lightsail instances in the same Amazon Web Services Region.
    ///
    /// Parameters:
    ///   - access: The access setting. The following access settings are available:    allow - Allows access to the bucket and its objects.    deny - Denies access to the bucket and its objects. Use this setting to remove access for a resource previously set to allow.
    ///   - bucketName: The name of the bucket for which to set access to another Lightsail resource.
    ///   - resourceName: The name of the Lightsail instance for which to set bucket access. The instance must be in a running or stopped state.
    ///   - logger: Logger use during operation
    @inlinable
    public func setResourceAccessForBucket(
        access: ResourceBucketAccess,
        bucketName: String,
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SetResourceAccessForBucketResult {
        let input = SetResourceAccessForBucketRequest(
            access: access, 
            bucketName: bucketName, 
            resourceName: resourceName
        )
        return try await self.setResourceAccessForBucket(input, logger: logger)
    }

    /// Creates an SSL/TLS certificate that secures traffic for your website. After the certificate is created, it is installed on the specified Lightsail instance. If you provide more than one domain name in the request, at least one name must be less than or equal to 63 characters in length.
    @Sendable
    @inlinable
    public func setupInstanceHttps(_ input: SetupInstanceHttpsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> SetupInstanceHttpsResult {
        try await self.client.execute(
            operation: "SetupInstanceHttps", 
            path: "/ls/api/2016-11-28/setup-instance-https", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an SSL/TLS certificate that secures traffic for your website. After the certificate is created, it is installed on the specified Lightsail instance. If you provide more than one domain name in the request, at least one name must be less than or equal to 63 characters in length.
    ///
    /// Parameters:
    ///   - certificateProvider: The certificate authority that issues the SSL/TLS certificate.
    ///   - domainNames: The name of the domain and subdomains that were specified for the SSL/TLS certificate.
    ///   - emailAddress: The contact method for SSL/TLS certificate renewal alerts. You can enter one email address.
    ///   - instanceName: The name of the Lightsail instance.
    ///   - logger: Logger use during operation
    @inlinable
    public func setupInstanceHttps(
        certificateProvider: CertificateProvider,
        domainNames: [String],
        emailAddress: String,
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> SetupInstanceHttpsResult {
        let input = SetupInstanceHttpsRequest(
            certificateProvider: certificateProvider, 
            domainNames: domainNames, 
            emailAddress: emailAddress, 
            instanceName: instanceName
        )
        return try await self.setupInstanceHttps(input, logger: logger)
    }

    /// Initiates a graphical user interface (GUI) session that’s used to access a virtual computer’s operating system and application. The session will be active for 1 hour. Use this action to resume the session after it expires.
    @Sendable
    @inlinable
    public func startGUISession(_ input: StartGUISessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartGUISessionResult {
        try await self.client.execute(
            operation: "StartGUISession", 
            path: "/ls/api/2016-11-28/start-gui-session", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Initiates a graphical user interface (GUI) session that’s used to access a virtual computer’s operating system and application. The session will be active for 1 hour. Use this action to resume the session after it expires.
    ///
    /// Parameters:
    ///   - resourceName: The resource name.
    ///   - logger: Logger use during operation
    @inlinable
    public func startGUISession(
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartGUISessionResult {
        let input = StartGUISessionRequest(
            resourceName: resourceName
        )
        return try await self.startGUISession(input, logger: logger)
    }

    /// Starts a specific Amazon Lightsail instance from a stopped state. To restart an instance, use the reboot instance operation.  When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the Amazon Lightsail Developer Guide.  The start instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func startInstance(_ input: StartInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartInstanceResult {
        try await self.client.execute(
            operation: "StartInstance", 
            path: "/ls/api/2016-11-28/StartInstance", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts a specific Amazon Lightsail instance from a stopped state. To restart an instance, use the reboot instance operation.  When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the Amazon Lightsail Developer Guide.  The start instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - instanceName: The name of the instance (a virtual private server) to start.
    ///   - logger: Logger use during operation
    @inlinable
    public func startInstance(
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartInstanceResult {
        let input = StartInstanceRequest(
            instanceName: instanceName
        )
        return try await self.startInstance(input, logger: logger)
    }

    /// Starts a specific database from a stopped state in Amazon Lightsail. To restart a database, use the reboot relational database operation. The start relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func startRelationalDatabase(_ input: StartRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartRelationalDatabaseResult {
        try await self.client.execute(
            operation: "StartRelationalDatabase", 
            path: "/ls/api/2016-11-28/StartRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts a specific database from a stopped state in Amazon Lightsail. To restart a database, use the reboot relational database operation. The start relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - relationalDatabaseName: The name of your database to start.
    ///   - logger: Logger use during operation
    @inlinable
    public func startRelationalDatabase(
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartRelationalDatabaseResult {
        let input = StartRelationalDatabaseRequest(
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.startRelationalDatabase(input, logger: logger)
    }

    /// Terminates a web-based Amazon DCV session that’s used to access a virtual computer’s operating system or application. The session will close and any unsaved data will be lost.
    @Sendable
    @inlinable
    public func stopGUISession(_ input: StopGUISessionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopGUISessionResult {
        try await self.client.execute(
            operation: "StopGUISession", 
            path: "/ls/api/2016-11-28/stop-gui-session", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Terminates a web-based Amazon DCV session that’s used to access a virtual computer’s operating system or application. The session will close and any unsaved data will be lost.
    ///
    /// Parameters:
    ///   - resourceName: The resource name.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopGUISession(
        resourceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopGUISessionResult {
        let input = StopGUISessionRequest(
            resourceName: resourceName
        )
        return try await self.stopGUISession(input, logger: logger)
    }

    /// Stops a specific Amazon Lightsail instance that is currently running.  When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the Amazon Lightsail Developer Guide.  The stop instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func stopInstance(_ input: StopInstanceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopInstanceResult {
        try await self.client.execute(
            operation: "StopInstance", 
            path: "/ls/api/2016-11-28/StopInstance", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a specific Amazon Lightsail instance that is currently running.  When you start a stopped instance, Lightsail assigns a new public IP address to the instance. To use the same IP address after stopping and starting an instance, create a static IP address and attach it to the instance. For more information, see the Amazon Lightsail Developer Guide.  The stop instance operation supports tag-based access control via resource tags applied to the resource identified by instance name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - force: When set to True, forces a Lightsail instance that is stuck in a stopping state to stop.  Only use the force parameter if your instance is stuck in the stopping state. In any other state, your instance should stop normally without adding this parameter to your API request.
    ///   - instanceName: The name of the instance (a virtual private server) to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopInstance(
        force: Bool? = nil,
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopInstanceResult {
        let input = StopInstanceRequest(
            force: force, 
            instanceName: instanceName
        )
        return try await self.stopInstance(input, logger: logger)
    }

    /// Stops a specific database that is currently running in Amazon Lightsail.  If you don't manually start your database instance after it has been stopped for seven consecutive days, Amazon Lightsail automatically starts it for you. This action helps ensure that your database instance doesn't fall behind on any required maintenance updates.  The stop relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func stopRelationalDatabase(_ input: StopRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopRelationalDatabaseResult {
        try await self.client.execute(
            operation: "StopRelationalDatabase", 
            path: "/ls/api/2016-11-28/StopRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a specific database that is currently running in Amazon Lightsail.  If you don't manually start your database instance after it has been stopped for seven consecutive days, Amazon Lightsail automatically starts it for you. This action helps ensure that your database instance doesn't fall behind on any required maintenance updates.  The stop relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - relationalDatabaseName: The name of your database to stop.
    ///   - relationalDatabaseSnapshotName: The name of your new database snapshot to be created before stopping your database.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopRelationalDatabase(
        relationalDatabaseName: String,
        relationalDatabaseSnapshotName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopRelationalDatabaseResult {
        let input = StopRelationalDatabaseRequest(
            relationalDatabaseName: relationalDatabaseName, 
            relationalDatabaseSnapshotName: relationalDatabaseSnapshotName
        )
        return try await self.stopRelationalDatabase(input, logger: logger)
    }

    /// Adds one or more tags to the specified Amazon Lightsail resource. Each resource can have a maximum of 50 tags. Each tag consists of a key and an optional value. Tag keys must be unique per resource. For more information about tags, see the Amazon Lightsail Developer Guide. The tag resource operation supports tag-based access control via request tags and resource tags applied to the resource identified by resource name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResult {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/ls/api/2016-11-28/TagResource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Adds one or more tags to the specified Amazon Lightsail resource. Each resource can have a maximum of 50 tags. Each tag consists of a key and an optional value. Tag keys must be unique per resource. For more information about tags, see the Amazon Lightsail Developer Guide. The tag resource operation supports tag-based access control via request tags and resource tags applied to the resource identified by resource name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource to which you want to add a tag.
    ///   - resourceName: The name of the resource to which you are adding tags.
    ///   - tags: The tag key and optional value.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String? = nil,
        resourceName: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResult {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            resourceName: resourceName, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Tests an alarm by displaying a banner on the Amazon Lightsail console. If a notification trigger is configured for the specified alarm, the test also sends a notification to the notification protocol (Email and/or SMS) configured for the alarm. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail.
    @Sendable
    @inlinable
    public func testAlarm(_ input: TestAlarmRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TestAlarmResult {
        try await self.client.execute(
            operation: "TestAlarm", 
            path: "/ls/api/2016-11-28/TestAlarm", 
            httpMethod: .GET, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Tests an alarm by displaying a banner on the Amazon Lightsail console. If a notification trigger is configured for the specified alarm, the test also sends a notification to the notification protocol (Email and/or SMS) configured for the alarm. An alarm is used to monitor a single metric for one of your resources. When a metric condition is met, the alarm can notify you by email, SMS text message, and a banner displayed on the Amazon Lightsail console. For more information, see Alarms in Amazon Lightsail.
    ///
    /// Parameters:
    ///   - alarmName: The name of the alarm to test.
    ///   - state: The alarm state to test. An alarm has the following possible states that can be tested:    ALARM - The metric is outside of the defined threshold.    INSUFFICIENT_DATA - The alarm has just started, the metric is not available, or not enough data is available for the metric to determine the alarm state.    OK - The metric is within the defined threshold.
    ///   - logger: Logger use during operation
    @inlinable
    public func testAlarm(
        alarmName: String,
        state: AlarmState,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TestAlarmResult {
        let input = TestAlarmRequest(
            alarmName: alarmName, 
            state: state
        )
        return try await self.testAlarm(input, logger: logger)
    }

    /// Unpeers the Lightsail VPC from the user's default VPC.
    @Sendable
    @inlinable
    public func unpeerVpc(_ input: UnpeerVpcRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UnpeerVpcResult {
        try await self.client.execute(
            operation: "UnpeerVpc", 
            path: "/ls/api/2016-11-28/UnpeerVpc", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Unpeers the Lightsail VPC from the user's default VPC.
    ///
    /// Parameters:
    ///   - logger: Logger use during operation
    @inlinable
    public func unpeerVpc(
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UnpeerVpcResult {
        let input = UnpeerVpcRequest(
        )
        return try await self.unpeerVpc(input, logger: logger)
    }

    /// Deletes the specified set of tag keys and their values from the specified Amazon Lightsail resource. The untag resource operation supports tag-based access control via request tags and resource tags applied to the resource identified by resource name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResult {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/ls/api/2016-11-28/UntagResource", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes the specified set of tag keys and their values from the specified Amazon Lightsail resource. The untag resource operation supports tag-based access control via request tags and resource tags applied to the resource identified by resource name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the resource from which you want to remove a tag.
    ///   - resourceName: The name of the resource from which you are removing a tag.
    ///   - tagKeys: The tag keys to delete from the specified resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String? = nil,
        resourceName: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResult {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            resourceName: resourceName, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates an existing Amazon Lightsail bucket. Use this action to update the configuration of an existing bucket, such as versioning, public accessibility, and the Amazon Web Services accounts that can access the bucket.
    @Sendable
    @inlinable
    public func updateBucket(_ input: UpdateBucketRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateBucketResult {
        try await self.client.execute(
            operation: "UpdateBucket", 
            path: "/ls/api/2016-11-28/UpdateBucket", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Amazon Lightsail bucket. Use this action to update the configuration of an existing bucket, such as versioning, public accessibility, and the Amazon Web Services accounts that can access the bucket.
    ///
    /// Parameters:
    ///   - accessLogConfig: An object that describes the access log configuration for the bucket.
    ///   - accessRules: An object that sets the public accessibility of objects in the specified bucket.
    ///   - bucketName: The name of the bucket to update.
    ///   - readonlyAccessAccounts: An array of strings to specify the Amazon Web Services account IDs that can access the bucket. You can give a maximum of 10 Amazon Web Services accounts access to a bucket.
    ///   - versioning: Specifies whether to enable or suspend versioning of objects in the bucket. The following options can be specified:    Enabled - Enables versioning of objects in the specified bucket.    Suspended - Suspends versioning of objects in the specified bucket. Existing object versions are retained.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateBucket(
        accessLogConfig: BucketAccessLogConfig? = nil,
        accessRules: AccessRules? = nil,
        bucketName: String,
        readonlyAccessAccounts: [String]? = nil,
        versioning: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateBucketResult {
        let input = UpdateBucketRequest(
            accessLogConfig: accessLogConfig, 
            accessRules: accessRules, 
            bucketName: bucketName, 
            readonlyAccessAccounts: readonlyAccessAccounts, 
            versioning: versioning
        )
        return try await self.updateBucket(input, logger: logger)
    }

    /// Updates the bundle, or storage plan, of an existing Amazon Lightsail bucket. A bucket bundle specifies the monthly cost, storage space, and data transfer quota for a bucket. You can update a bucket's bundle only one time within a monthly Amazon Web Services billing cycle. To determine if you can update a bucket's bundle, use the GetBuckets action. The ableToUpdateBundle parameter in the response will indicate whether you can currently update a bucket's bundle. Update a bucket's bundle if it's consistently going over its storage space or data transfer quota, or if a bucket's usage is consistently in the lower range of its storage space or data transfer quota. Due to the unpredictable usage fluctuations that a bucket might experience, we strongly recommend that you update a bucket's bundle only as a long-term strategy, instead of as a short-term, monthly cost-cutting measure. Choose a bucket bundle that will provide the bucket with ample storage space and data transfer for a long time to come.
    @Sendable
    @inlinable
    public func updateBucketBundle(_ input: UpdateBucketBundleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateBucketBundleResult {
        try await self.client.execute(
            operation: "UpdateBucketBundle", 
            path: "/ls/api/2016-11-28/UpdateBucketBundle", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the bundle, or storage plan, of an existing Amazon Lightsail bucket. A bucket bundle specifies the monthly cost, storage space, and data transfer quota for a bucket. You can update a bucket's bundle only one time within a monthly Amazon Web Services billing cycle. To determine if you can update a bucket's bundle, use the GetBuckets action. The ableToUpdateBundle parameter in the response will indicate whether you can currently update a bucket's bundle. Update a bucket's bundle if it's consistently going over its storage space or data transfer quota, or if a bucket's usage is consistently in the lower range of its storage space or data transfer quota. Due to the unpredictable usage fluctuations that a bucket might experience, we strongly recommend that you update a bucket's bundle only as a long-term strategy, instead of as a short-term, monthly cost-cutting measure. Choose a bucket bundle that will provide the bucket with ample storage space and data transfer for a long time to come.
    ///
    /// Parameters:
    ///   - bucketName: The name of the bucket for which to update the bundle.
    ///   - bundleId: The ID of the new bundle to apply to the bucket. Use the GetBucketBundles action to get a list of bundle IDs that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateBucketBundle(
        bucketName: String,
        bundleId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateBucketBundleResult {
        let input = UpdateBucketBundleRequest(
            bucketName: bucketName, 
            bundleId: bundleId
        )
        return try await self.updateBucketBundle(input, logger: logger)
    }

    /// Updates the configuration of your Amazon Lightsail container service, such as its power, scale, and public domain names.
    @Sendable
    @inlinable
    public func updateContainerService(_ input: UpdateContainerServiceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateContainerServiceResult {
        try await self.client.execute(
            operation: "UpdateContainerService", 
            path: "/ls/api/2016-11-28/container-services/{serviceName}", 
            httpMethod: .PATCH, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the configuration of your Amazon Lightsail container service, such as its power, scale, and public domain names.
    ///
    /// Parameters:
    ///   - isDisabled: A Boolean value to indicate whether the container service is disabled.
    ///   - power: The power for the container service. The power specifies the amount of memory, vCPUs, and base monthly cost of each node of the container service. The power and scale of a container service makes up its configured capacity. To determine the monthly price of your container service, multiply the base price of the power with the scale (the number of nodes) of the service. Use the GetContainerServicePowers action to view the specifications of each power option.
    ///   - privateRegistryAccess: An object to describe the configuration for the container service to access private container image repositories, such as Amazon Elastic Container Registry (Amazon ECR) private repositories. For more information, see Configuring access to an Amazon ECR private repository for an Amazon Lightsail container service in the Amazon Lightsail Developer Guide.
    ///   - publicDomainNames: The public domain names to use with the container service, such as example.com and www.example.com. You can specify up to four public domain names for a container service. The domain names that you specify are used when you create a deployment with a container configured as the public endpoint of your container service. If you don't specify public domain names, then you can use the default domain of the container service.  You must create and validate an SSL/TLS certificate before you can use public domain names with your container service. Use the CreateCertificate action to create a certificate for the public domain names you want to use with your container service.  You can specify public domain names using a string to array map as shown in the example later on this page.
    ///   - scale: The scale for the container service. The scale specifies the allocated compute nodes of the container service. The power and scale of a container service makes up its configured capacity. To determine the monthly price of your container service, multiply the base price of the power with the scale (the number of nodes) of the service.
    ///   - serviceName: The name of the container service to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateContainerService(
        isDisabled: Bool? = nil,
        power: ContainerServicePowerName? = nil,
        privateRegistryAccess: PrivateRegistryAccessRequest? = nil,
        publicDomainNames: [String: [String]]? = nil,
        scale: Int? = nil,
        serviceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateContainerServiceResult {
        let input = UpdateContainerServiceRequest(
            isDisabled: isDisabled, 
            power: power, 
            privateRegistryAccess: privateRegistryAccess, 
            publicDomainNames: publicDomainNames, 
            scale: scale, 
            serviceName: serviceName
        )
        return try await self.updateContainerService(input, logger: logger)
    }

    /// Updates an existing Amazon Lightsail content delivery network (CDN) distribution. Use this action to update the configuration of your existing distribution.
    @Sendable
    @inlinable
    public func updateDistribution(_ input: UpdateDistributionRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDistributionResult {
        try await self.client.execute(
            operation: "UpdateDistribution", 
            path: "/ls/api/2016-11-28/UpdateDistribution", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates an existing Amazon Lightsail content delivery network (CDN) distribution. Use this action to update the configuration of your existing distribution.
    ///
    /// Parameters:
    ///   - cacheBehaviors: An array of objects that describe the per-path cache behavior for the distribution.
    ///   - cacheBehaviorSettings: An object that describes the cache behavior settings for the distribution.  The cacheBehaviorSettings specified in your UpdateDistributionRequest will replace your distribution's existing settings.
    ///   - certificateName: The name of the SSL/TLS certificate that you want to attach to the distribution. Only certificates with a status of ISSUED can be attached to a distribution. Use the GetCertificates action to get a list of certificate names that you can specify.
    ///   - defaultCacheBehavior: An object that describes the default cache behavior for the distribution.
    ///   - distributionName: The name of the distribution to update. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - isEnabled: Indicates whether to enable the distribution.
    ///   - origin: An object that describes the origin resource for the distribution, such as a Lightsail instance, bucket, or load balancer. The distribution pulls, caches, and serves content from the origin.
    ///   - useDefaultCertificate: Indicates whether the default SSL/TLS certificate is attached to the distribution. The default value is true. When true, the distribution uses the default domain name such as d111111abcdef8.cloudfront.net. Set this value to false to attach a new certificate to the distribution.
    ///   - viewerMinimumTlsProtocolVersion: Use this parameter to update the minimum TLS protocol version for the SSL/TLS certificate that's attached to the distribution.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDistribution(
        cacheBehaviors: [CacheBehaviorPerPath]? = nil,
        cacheBehaviorSettings: CacheSettings? = nil,
        certificateName: String? = nil,
        defaultCacheBehavior: CacheBehavior? = nil,
        distributionName: String,
        isEnabled: Bool? = nil,
        origin: InputOrigin? = nil,
        useDefaultCertificate: Bool? = nil,
        viewerMinimumTlsProtocolVersion: ViewerMinimumTlsProtocolVersionEnum? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDistributionResult {
        let input = UpdateDistributionRequest(
            cacheBehaviors: cacheBehaviors, 
            cacheBehaviorSettings: cacheBehaviorSettings, 
            certificateName: certificateName, 
            defaultCacheBehavior: defaultCacheBehavior, 
            distributionName: distributionName, 
            isEnabled: isEnabled, 
            origin: origin, 
            useDefaultCertificate: useDefaultCertificate, 
            viewerMinimumTlsProtocolVersion: viewerMinimumTlsProtocolVersion
        )
        return try await self.updateDistribution(input, logger: logger)
    }

    /// Updates the bundle of your Amazon Lightsail content delivery network (CDN) distribution. A distribution bundle specifies the monthly network transfer quota and monthly cost of your distribution. Update your distribution's bundle if your distribution is going over its monthly network transfer quota and is incurring an overage fee. You can update your distribution's bundle only one time within your monthly Amazon Web Services billing cycle. To determine if you can update your distribution's bundle, use the GetDistributions action. The ableToUpdateBundle parameter in the result will indicate whether you can currently update your distribution's bundle.
    @Sendable
    @inlinable
    public func updateDistributionBundle(_ input: UpdateDistributionBundleRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDistributionBundleResult {
        try await self.client.execute(
            operation: "UpdateDistributionBundle", 
            path: "/ls/api/2016-11-28/UpdateDistributionBundle", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the bundle of your Amazon Lightsail content delivery network (CDN) distribution. A distribution bundle specifies the monthly network transfer quota and monthly cost of your distribution. Update your distribution's bundle if your distribution is going over its monthly network transfer quota and is incurring an overage fee. You can update your distribution's bundle only one time within your monthly Amazon Web Services billing cycle. To determine if you can update your distribution's bundle, use the GetDistributions action. The ableToUpdateBundle parameter in the result will indicate whether you can currently update your distribution's bundle.
    ///
    /// Parameters:
    ///   - bundleId: The bundle ID of the new bundle to apply to your distribution. Use the GetDistributionBundles action to get a list of distribution bundle IDs that you can specify.
    ///   - distributionName: The name of the distribution for which to update the bundle. Use the GetDistributions action to get a list of distribution names that you can specify.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDistributionBundle(
        bundleId: String? = nil,
        distributionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDistributionBundleResult {
        let input = UpdateDistributionBundleRequest(
            bundleId: bundleId, 
            distributionName: distributionName
        )
        return try await self.updateDistributionBundle(input, logger: logger)
    }

    /// Updates a domain recordset after it is created. The update domain entry operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func updateDomainEntry(_ input: UpdateDomainEntryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateDomainEntryResult {
        try await self.client.execute(
            operation: "UpdateDomainEntry", 
            path: "/ls/api/2016-11-28/UpdateDomainEntry", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates a domain recordset after it is created. The update domain entry operation supports tag-based access control via resource tags applied to the resource identified by domain name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - domainEntry: An array of key-value pairs containing information about the domain entry.
    ///   - domainName: The name of the domain recordset to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateDomainEntry(
        domainEntry: DomainEntry,
        domainName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateDomainEntryResult {
        let input = UpdateDomainEntryRequest(
            domainEntry: domainEntry, 
            domainName: domainName
        )
        return try await self.updateDomainEntry(input, logger: logger)
    }

    /// Modifies the Amazon Lightsail instance metadata parameters on a running or stopped instance. When you modify the parameters on a running instance, the GetInstance or GetInstances API operation initially responds with a state of pending. After the parameter modifications are successfully applied, the state changes to applied in subsequent GetInstance or GetInstances API calls. For more information, see Use IMDSv2 with an Amazon Lightsail instance in the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func updateInstanceMetadataOptions(_ input: UpdateInstanceMetadataOptionsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateInstanceMetadataOptionsResult {
        try await self.client.execute(
            operation: "UpdateInstanceMetadataOptions", 
            path: "/ls/api/2016-11-28/UpdateInstanceMetadataOptions", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Modifies the Amazon Lightsail instance metadata parameters on a running or stopped instance. When you modify the parameters on a running instance, the GetInstance or GetInstances API operation initially responds with a state of pending. After the parameter modifications are successfully applied, the state changes to applied in subsequent GetInstance or GetInstances API calls. For more information, see Use IMDSv2 with an Amazon Lightsail instance in the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - httpEndpoint: Enables or disables the HTTP metadata endpoint on your instances. If this parameter is not specified, the existing state is maintained. If you specify a value of disabled, you cannot access your instance metadata.
    ///   - httpProtocolIpv6: Enables or disables the IPv6 endpoint for the instance metadata service. This setting applies only when the HTTP metadata endpoint is enabled.  This parameter is available only for instances in the Europe (Stockholm) Amazon Web Services Region (eu-north-1).
    ///   - httpPutResponseHopLimit: The desired HTTP PUT response hop limit for instance metadata requests. A larger number means that the instance metadata requests can travel farther. If no parameter is specified, the existing state is maintained.
    ///   - httpTokens: The state of token usage for your instance metadata requests. If the parameter is not specified in the request, the default state is optional. If the state is optional, you can choose whether to retrieve instance metadata with a signed token header on your request. If you retrieve the IAM role credentials without a token, the version 1.0 role credentials are returned. If you retrieve the IAM role credentials by using a valid signed token, the version 2.0 role credentials are returned. If the state is required, you must send a signed token header with all instance metadata retrieval requests. In this state, retrieving the IAM role credential always returns the version 2.0 credentials. The version 1.0 credentials are not available.
    ///   - instanceName: The name of the instance for which to update metadata parameters.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateInstanceMetadataOptions(
        httpEndpoint: HttpEndpoint? = nil,
        httpProtocolIpv6: HttpProtocolIpv6? = nil,
        httpPutResponseHopLimit: Int? = nil,
        httpTokens: HttpTokens? = nil,
        instanceName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateInstanceMetadataOptionsResult {
        let input = UpdateInstanceMetadataOptionsRequest(
            httpEndpoint: httpEndpoint, 
            httpProtocolIpv6: httpProtocolIpv6, 
            httpPutResponseHopLimit: httpPutResponseHopLimit, 
            httpTokens: httpTokens, 
            instanceName: instanceName
        )
        return try await self.updateInstanceMetadataOptions(input, logger: logger)
    }

    /// Updates the specified attribute for a load balancer. You can only update one attribute at a time. The update load balancer attribute operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func updateLoadBalancerAttribute(_ input: UpdateLoadBalancerAttributeRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateLoadBalancerAttributeResult {
        try await self.client.execute(
            operation: "UpdateLoadBalancerAttribute", 
            path: "/ls/api/2016-11-28/UpdateLoadBalancerAttribute", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates the specified attribute for a load balancer. You can only update one attribute at a time. The update load balancer attribute operation supports tag-based access control via resource tags applied to the resource identified by load balancer name. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - attributeName: The name of the attribute you want to update.
    ///   - attributeValue: The value that you want to specify for the attribute name. The following values are supported depending on what you specify for the attributeName request parameter:   If you specify HealthCheckPath for the attributeName request parameter, then the attributeValue request parameter must be the path to ping on the target (for example, /weather/us/wa/seattle).   If you specify SessionStickinessEnabled for the attributeName request parameter, then the attributeValue request parameter must be true to activate session stickiness or false to deactivate session stickiness.   If you specify SessionStickiness_LB_CookieDurationSeconds for the attributeName request parameter, then the attributeValue request parameter must be an interger that represents the cookie duration in seconds.   If you specify HttpsRedirectionEnabled for the attributeName request parameter, then the attributeValue request parameter must be true to activate HTTP to HTTPS redirection or false to deactivate HTTP to HTTPS redirection.   If you specify TlsPolicyName for the attributeName request parameter, then the attributeValue request parameter must be the name of the TLS policy. Use the GetLoadBalancerTlsPolicies action to get a list of TLS policy names that you can specify.
    ///   - loadBalancerName: The name of the load balancer that you want to modify (my-load-balancer.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateLoadBalancerAttribute(
        attributeName: LoadBalancerAttributeName,
        attributeValue: String,
        loadBalancerName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateLoadBalancerAttributeResult {
        let input = UpdateLoadBalancerAttributeRequest(
            attributeName: attributeName, 
            attributeValue: attributeValue, 
            loadBalancerName: loadBalancerName
        )
        return try await self.updateLoadBalancerAttribute(input, logger: logger)
    }

    /// Allows the update of one or more attributes of a database in Amazon Lightsail. Updates are applied immediately, or in cases where the updates could result in an outage, are applied during the database's predefined maintenance window. The update relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func updateRelationalDatabase(_ input: UpdateRelationalDatabaseRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRelationalDatabaseResult {
        try await self.client.execute(
            operation: "UpdateRelationalDatabase", 
            path: "/ls/api/2016-11-28/UpdateRelationalDatabase", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows the update of one or more attributes of a database in Amazon Lightsail. Updates are applied immediately, or in cases where the updates could result in an outage, are applied during the database's predefined maintenance window. The update relational database operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - applyImmediately: When true, applies changes immediately. When false, applies changes during the preferred maintenance window. Some changes may cause an outage. Default: false
    ///   - caCertificateIdentifier: Indicates the certificate that needs to be associated with the database.
    ///   - disableBackupRetention: When true, disables automated backup retention for your database. Disabling backup retention deletes all automated database backups. Before disabling this, you may want to create a snapshot of your database using the create relational database snapshot operation. Updates are applied during the next maintenance window because this can result in an outage.
    ///   - enableBackupRetention: When true, enables automated backup retention for your database. Updates are applied during the next maintenance window because this can result in an outage.
    ///   - masterUserPassword: The password for the master user. The password can include any printable ASCII character except "/", """, or "@". MySQL  Constraints: Must contain from 8 to 41 characters.  PostgreSQL  Constraints: Must contain from 8 to 128 characters.
    ///   - preferredBackupWindow: The daily time range during which automated backups are created for your database if automated backups are enabled. Constraints:   Must be in the hh24:mi-hh24:mi format. Example: 16:00-16:30    Specified in Coordinated Universal Time (UTC).   Must not conflict with the preferred maintenance window.   Must be at least 30 minutes.
    ///   - preferredMaintenanceWindow: The weekly time range during which system maintenance can occur on your database. The default is a 30-minute window selected at random from an 8-hour block of time for each Amazon Web Services Region, occurring on a random day of the week. Constraints:   Must be in the ddd:hh24:mi-ddd:hh24:mi format.   Valid days: Mon, Tue, Wed, Thu, Fri, Sat, Sun.   Must be at least 30 minutes.   Specified in Coordinated Universal Time (UTC).   Example: Tue:17:00-Tue:17:30
    ///   - publiclyAccessible: Specifies the accessibility options for your database. A value of true specifies a database that is available to resources outside of your Lightsail account. A value of false specifies a database that is available only to your Lightsail resources in the same region as your database.
    ///   - relationalDatabaseBlueprintId: This parameter is used to update the major version of the database. Enter the blueprintId for the major version that you want to update to. Use the GetRelationalDatabaseBlueprints action to get a list of available blueprint IDs.
    ///   - relationalDatabaseName: The name of your Lightsail database resource to update.
    ///   - rotateMasterUserPassword: When true, the master user password is changed to a new strong password generated by Lightsail. Use the get relational database master user password operation to get the new password.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRelationalDatabase(
        applyImmediately: Bool? = nil,
        caCertificateIdentifier: String? = nil,
        disableBackupRetention: Bool? = nil,
        enableBackupRetention: Bool? = nil,
        masterUserPassword: String? = nil,
        preferredBackupWindow: String? = nil,
        preferredMaintenanceWindow: String? = nil,
        publiclyAccessible: Bool? = nil,
        relationalDatabaseBlueprintId: String? = nil,
        relationalDatabaseName: String,
        rotateMasterUserPassword: Bool? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRelationalDatabaseResult {
        let input = UpdateRelationalDatabaseRequest(
            applyImmediately: applyImmediately, 
            caCertificateIdentifier: caCertificateIdentifier, 
            disableBackupRetention: disableBackupRetention, 
            enableBackupRetention: enableBackupRetention, 
            masterUserPassword: masterUserPassword, 
            preferredBackupWindow: preferredBackupWindow, 
            preferredMaintenanceWindow: preferredMaintenanceWindow, 
            publiclyAccessible: publiclyAccessible, 
            relationalDatabaseBlueprintId: relationalDatabaseBlueprintId, 
            relationalDatabaseName: relationalDatabaseName, 
            rotateMasterUserPassword: rotateMasterUserPassword
        )
        return try await self.updateRelationalDatabase(input, logger: logger)
    }

    /// Allows the update of one or more parameters of a database in Amazon Lightsail. Parameter updates don't cause outages; therefore, their application is not subject to the preferred maintenance window. However, there are two ways in which parameter updates are applied: dynamic or pending-reboot. Parameters marked with a dynamic apply type are applied immediately. Parameters marked with a pending-reboot apply type are applied only after the database is rebooted using the reboot relational database operation. The update relational database parameters operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    @Sendable
    @inlinable
    public func updateRelationalDatabaseParameters(_ input: UpdateRelationalDatabaseParametersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateRelationalDatabaseParametersResult {
        try await self.client.execute(
            operation: "UpdateRelationalDatabaseParameters", 
            path: "/ls/api/2016-11-28/UpdateRelationalDatabaseParameters", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Allows the update of one or more parameters of a database in Amazon Lightsail. Parameter updates don't cause outages; therefore, their application is not subject to the preferred maintenance window. However, there are two ways in which parameter updates are applied: dynamic or pending-reboot. Parameters marked with a dynamic apply type are applied immediately. Parameters marked with a pending-reboot apply type are applied only after the database is rebooted using the reboot relational database operation. The update relational database parameters operation supports tag-based access control via resource tags applied to the resource identified by relationalDatabaseName. For more information, see the Amazon Lightsail Developer Guide.
    ///
    /// Parameters:
    ///   - parameters: The database parameters to update.
    ///   - relationalDatabaseName: The name of your database for which to update parameters.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateRelationalDatabaseParameters(
        parameters: [RelationalDatabaseParameter],
        relationalDatabaseName: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateRelationalDatabaseParametersResult {
        let input = UpdateRelationalDatabaseParametersRequest(
            parameters: parameters, 
            relationalDatabaseName: relationalDatabaseName
        )
        return try await self.updateRelationalDatabaseParameters(input, logger: logger)
    }
}

extension Lightsail {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Lightsail, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}
